Linux进程管理-计划任务at


linux系统操作的过程里面,不是所有对服务进程的操作都是要实时进行的。

Linux进程管理-计划任务at

[[email protected] ~]# vi /at.txt

cat /etc/hosts >/cat.log

 

[[email protected] ~]# at -f /at.txt now + 1 minutes

 

一分钟后查看

[[email protected] ~]# cat /cat.log

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.4      primary

 

 

这里面的命令也可以是脚本,这个脚本里面即使写了100个命令也是可以的,都可以在这个指定的时间依次运行。

 

如果要执行的命令、非常多,可以将这些命令写到一个文件当中,通过-f选项将文件里面所有的命令都导入进去,之后会在这个时间定期执行。

Linux进程管理-计划任务at

绝对计时法是推荐使用的

Linux进程管理-计划任务at

如果使用at的方式做的操作不是很复杂,推荐使用交互的方式就可以了。注意不管使用at命令还得crontab创建计划任务的时候,命令要写绝对路径。写完之后加上control +d进行保存即可。

写绝对路径是为了安全起见,有的时候黑客侵入会将命令做一个替换,可能会将一个加了木马的命令放在目录下面。

[[email protected] ~]# at now +1 minutes

at>/user/bin/ cat  /etc/hosts

at> <EOT>

job 1 at Tue Jan 16 21:46:00 2018

 

如果at命令没有在指定的时间执行可以查看at这个进程是否在启动,如果这个进程在启动那么这个计划任务就可以到时候执行。

[[email protected] mail]# ps -le | grep atd

4 S     0   1056      1  0  80   0 -  6461 hrtime ?        00:00:00 atd

如果一个时间点要执行的任务很多,那么就可以用vi写一个文件,比如写了一个at.script,里面写了很多内容甚至是一个复杂的shell脚本,使用at -f at.script 9:00  17/1/18或者使用输入重定向at< at.script 9:00就可以导入文件里面所以要执行的命令,后面加上时间值就可以了。


at -l atq可以查看系统当中是否有计划任务。

[[email protected] spool]# at -f /at.txt now + 2 minutes &

[1] 6376

[[email protected] spool]# job 3 at 2017-12-29 09:02

 

[1]+  Done                    at -f /at.txt now + 2 minutes

[[email protected] spool]# at -l

32017-12-29 09:02 a root

 

写完了计划任务会在/etc/spool/at下面产生一个相应的文件。

Linux进程管理-计划任务at

Linux进程管理-计划任务at
Linux进程管理-计划任务at

如果只想让root使用at命令只需要将at.allow,at.deny这两个文件删除掉就行了。

Linux进程管理-计划任务at

Batch使用的方法和at是一模一样的,也是batch加上时间值或者batch -f < 导入要执行的文件,时间的书写方法也一模一样,唯一不同的就是在运行的时候检查系统的负载状态,这个负载是就是使用w,top命令看到的系统平均负载值,系统在过去一分钟,十分钟,十五分钟的负载值,如果这个负载值在0.8以下,可以认为负载比较轻。比如使用batch定制了一个任务,明天早上九点,在执行之前会检查系统负载值,如果负载值较高,这个计划任务是不会执行的,如果负载值比较轻在0.8以下它才会执行。

[[email protected] at]# w

 10:53:34 up  5:24,  3 users,  load average: 0.05, 0.05, 0.10