在linux系统操作的过程里面,不是所有对服务进程的操作都是要实时进行的。
[[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选项将文件里面所有的命令都导入进去,之后会在这个时间定期执行。
绝对计时法是推荐使用的
如果使用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下面产生一个相应的文件。
如果只想让root使用at命令只需要将at.allow,at.deny这两个文件删除掉就行了。
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