Linux系统的工作任务有两种工作排程方式:
1.一种是未来某个特定的时间点的,该任务执行完后则不再执行。例如在下周某一天几点钟提醒该出门办理签证。
2.一种是例行性的,就是按照设定的某种模式有规律的周期性执行。例如每周日凌晨4点钟进行数据库的备份工作;系统每隔半小时检查系统内存使用情况等。
那么在Linux系统中是如何达到这两个功能的呢?简单的讲,上面两种情况可分别使用at指令与cron系统服务来实现。
一、at方式的例行性工作安排
1.启动atd服务
在linux系统上统一负责未来某个时间点的一次性工作任务的服务就是atd,它在CentOS系统上是默认是打开的。我们只需根据需要配置在某个时间点要执行的工作指令或任务,在时间点到来时atd会自动执行相关任务。atd服务的相关操作如下:#查看系统默认atd服务的状态
[[email protected] ~]# chkconfig --list atd
atd 0:off1:off2:off3:on4:on5:on6:off
#打开该服务方法如下
[[email protected] ~]# /etc/init.d/atd start
#检查当前状态:
[[email protected] ~]# /etc/init.d/atd status
atd (pid 2241) is running...
#显示系统正在运行中。
2.at的工作
at指令有两种工作方式,一种是交互方式,就是用户在at>提示符后输入多个要执行的执行命令,在输入完成后用ctrl+d提交任务。另一种则是将要执行的任务的各指令写入文件中并由at进行调用。#执行at命令,指定在某个时间点输出内容到/tmp/test.at文件
[[email protected] ~]# at 23:05
at> echo "now is:`date ‘+%F %R‘`" >/tmp/test.at
at> cat /etc/fstab >> /tmp/test.at
at>
job 7 at 2016-06-17 23:05
#查询当前at的所有工作排程
[[email protected] ~]# atq
72016-06-17 23:05 a root
其实,在执行完at指令后,系统会根据用户输入的指令内容自动的生成一文件,并保存在/var/spool/at目录中。如下指令所示:[[email protected] ~]# ll /var/spool/at
总用量 8
-rwx------. 1 root root 2918 6月 17 22:58 a000070174de29
drwx------. 2 daemon daemon 4096 6月 17 22:40 spool
#显示系统自动生成的at文件
[[email protected] ~]# cat /var/spool/at/a000070174de29
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
#…….中间删除部分内容
echo "now is:`date ‘+%F %R‘`" >/tmp/test.at
cat /etc/fstab >> /tmp/test.at
marcinDELIMITER6be5911e
# cat /var/spool/at/a000070174de29文件内容结束
#at任务完成后,打开文件,显示执行时间与设定时间一致
[[email protected] ~]# cat /tmp/test.at
now is:2016-06-17 23:05
#
# /etc/fstab
# Created by anaconda on Mon Jun 13 20:04:39 2016
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b770379b-7394-4d18-bb60-31b6bdea2af9 / ext4 defaults 1 1
#………中间删除一部分内容
proc /proc proc defaults 0 0
上面是采用命令的交互方式,另一种方式则是将要执行的各指令写入文件中并由at进行调用。如下:#编辑文件testat.sh,在文件中输入两指令
[[email protected] tmp]# vim /tmp/testat.sh
echo "now is:`date ‘+%F %T‘`" > /tmp/test2.at
cat /etc/fstab >> /tmp/test2.at
#由at指令在某一时间点调用执行。
[[email protected] ~]# at -f /tmp/testat.sh 23:37
两种指令执行方式虽不同,但过程和效果是一样。
3.at的常用语法
at TIME 设置工作排序
Time可以具体的日期或时间了,如YYYY-MM-DD或例子中的HH:MM,也可以是模糊时间,now, noon, midnight, teatime, tomorrow等。
at –l 或atq :查看工作排程列表
at -d job_num或 atrm job_num : 删除工作排程,后接任务编号