Windows系统的计划任务估计大家都用过,图形界面,使用简单。Linux同样有计划任务工具,并且功能更为强大,尤其是结合脚本。Linux里常用2种计划任务工具命令:at和crontab。
1. Linux计划任务工具:at
at命令用于一次性执行某任务。当然,如果你结合能自动循环执行任何的脚本,实际上也能达到循环或定期反复执行的效果。如果你想定期反复执行某任务,首选crontab,而不是at。at只能定时一次性执行某程序或者某脚本。
以CentOS7.5为例,默认情况下,最小化安装并没有包含at工具。需要管理员手动安装。
[root@zcwyou ~]# at
-bash: at: 未找到命令
安装at
[root@zcwyou ~]# yum -y install at
最后系统表明安装成功:
Running transaction
正在安装 : at-3.1.13-23.el7.x86_64 1/1
验证中 : at-3.1.13-23.el7.x86_64 1/1
已安装:
at.x86_64 0:3.1.13-23.el7
完毕!
Linux安装at
CentOS 6开启atd服务。
[root@zcwyou ~]# /etc/init.d/atd start
或者
[root@zcwyou ~]# service atd start
CentOS 6检查:
[root@zcwyou ~]# ps -ef |grep atd
确认能看到/usr/sbin/atd正在运行:
root 53055 1 0 09:30 ? 00:00:00 /usr/sbin/atd -f
CentOS 7,开启atd服务。
[root@zcwyou ~]# systemctl start atd
CentOS 7检查:
[root@zcwyou ~]# systemctl status atd
确认能看到active (running):
Active: active (running)
OK!,现在at功能已经成功开启了。默认情况下,at已经设置好了开机自启动。
linux启用at计划任务
2. 常见使用方法
2.1 使用at命令定时执行某脚本
需求:2天后,下午6点执行/root/abc.sh,请提前写好abc.sh这个脚本文件,并保证具有x可执行权限。
[root@zcwyou ~]# at 6pm+2 days
执行过程
at> /root/abc.sh
at> 按键盘上的ctrl+d,表示计划任务设置完毕。
at>
job 2 at 2018-10-11 18:00
at计划任务保存位置
/var/spool/at
linux使用at设置计划任务
2.2 查看at计划任务
查看任务命令atq,可以看到有一个正在等待执行的任务,序号为4
[root@zcwyou ~]# atq
4 2018-10-11 18:00 a root
linux使用at查看计划任务
显示计划任务的自动生成的脚本,以序号为4的任务为例:
[root@zcwyou ~]# at -c 4
2.3 使用atrm命令删除计划任务
比如删除序号为4的计划任务:
[root@zcwyou ~]# atrm 4
linux删除at任务
2.4 定时重启
两分钟后后重启服务器
[root@zcwyou ~]# at now +2 minutes
at> reboot
at> 按键盘上的ctrl+d,表示计划任务设置完毕。
at>
job 1 at Wed Oct 10 10:09:00 2018
看到job 1被创建了,接下来查看它
[root@zcwyou ~]# atq
1 Wed Oct 10 10:09:00 2018 a root
确实可以看到有一个序号为1的任务等待执行。2分钟后,服务器被重启了。
2.5 指定时间执行任务
明天凌晨2点执行某任务
[root@zcwyou ~]# at 02:00am tomorrow
2018年12月30号凌晨4点执行某任务
[root@zcwyou ~]# at 04:00am 12/30/2018
结合以上例子,可以灵活修改一些时间选项
比如把minutes(分钟)改为hours(小时),2小时后执行某任务。
[root@zcwyou ~]# at now +2 hours
3. at的时间选项
- hh:mm,即小时:分钟(当天,如果时间已过,则在第二天执行)
- midnight(深夜),noon(中午),teatime(下午茶时间,即下午4点),today,tomorrow等
- 时间后加am表示上午,pm表示下午
- 指定具体执行日期mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)
- 相对计时法now + n 单位,now是现在时刻,n为数字,单位有minutes、hours、days、weeks,分别表示分钟、小时、天、周
4. 限制用户使用at命令,一个用户名占用一行
允许用户列表:
/etc/at.allow
禁止用户列表
/etc/at.deny
Step1: atd先检查allow列表,如果里面有指定的用户,即可允许该用户使用at。
Step2: 如果用户不在allow列表中,则需要继续查看deny列表文件是否存在并且需要匹配里面的内容,如果deny列表文件存在并且内容为空,则该用户可以使用at。如果deny列表文件不存在,则该用户不能使用at,root用户不受限制。