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

完毕!




centos 计划任务不生效_CentOS


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已经设置好了开机自启动。


centos 计划任务不生效_centos 计划任务不生效_02


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


centos 计划任务不生效_CentOS_03


linux使用at设置计划任务

2.2 查看at计划任务

查看任务命令atq,可以看到有一个正在等待执行的任务,序号为4

[root@zcwyou ~]# atq

4 2018-10-11 18:00 a root


centos 计划任务不生效_linux定时任务_04


linux使用at查看计划任务

显示计划任务的自动生成的脚本,以序号为4的任务为例:

[root@zcwyou ~]# at -c 4

2.3 使用atrm命令删除计划任务

比如删除序号为4的计划任务:

[root@zcwyou ~]# atrm 4


centos 计划任务不生效_yum未找到命令_05


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的时间选项

  1. hh:mm,即小时:分钟(当天,如果时间已过,则在第二天执行)
  2. midnight(深夜),noon(中午),teatime(下午茶时间,即下午4点),today,tomorrow等
  3. 时间后加am表示上午,pm表示下午
  4. 指定具体执行日期mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)
  5. 相对计时法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用户不受限制。