【单一工作调度】
在 Linux 中,存在两种工作调度方式,一种是例行性的,即每隔一定周期执行的工作,另一种是突发性的,即这次工作完成后就结束调度
在 Linux 中,单一工作调度依靠 atd 服务的支持,通过 at
命令来实现
at
命令用于生成要运行的工作,并将这个工作以文本文件的方式写入 /var/spool/at/
目录内,之后该工作便等待 atd 这个服务的取用与执行
考虑安全性的问题,并非所有用户都可以使用 at
工作调度,可以利用 /etc/at.allow
和 /etc/at.deny
这两个文件来对 at
进行使用限制
- 寻找
/etc/at.allow
这个文件,写在这个文件内的用户才能使用at
命令 - 若
/etc/at.allow
不存在,就寻找/etc/at.deny
文件,没有在该文件中声明的用户均可以使用at
命令 - 若两个文件均不存在,则只有 root 用户可以使用
at
命令
【at 命令】
at
命令的运行十分简单,其命令格式为:at [选项] TIME
其中,TIME 为时间格式,定义什么时候要执行 at
这项工作的时间,格式如下表:
格式 | 含义 | 实例 |
---|---|---|
HH:MM | 在今日的 HH:MM 时刻执行,若已超过该时刻,则明日该时刻执行 | 04:00 |
HH:MM YYYY-MM-DD | 在 YYYY 年 MM 月 DD 日 HH:MM 执行 | 04:00 2018-07-18 |
HH:MM[am|pm] [Month] [Date] | 在 Month 月 Date 日的 HH:MM 执行 | 04pm March 17 |
HH:MM[am|pm] + number [minutes|hours|days|weeks] | 在某个时间点再加 number 分钟/小时/天/周后执行,时间点为 now 时,表示当前时刻 | 04pm + 3 days |
常见选项如下:
- -m:当工作完成后,即使没有输出信息,也以 email 通知用户该工作已经完成
- -l:列出目前系统上所有该用户的
at
调度信息 - -d:取消一个在
at
调度中的工作 - -v:使用较为明显的时间格式列出
at
调度的任务列表 - -c:后接一个号码,可以列出该号码对应工作的实际命令内容
当输入完 at
命令后,会进入一个 At Shell 环境让用户输入要执行的工作命令,在输入完成后,键入 [Ctrl]+[d] 即可退出该环境
需要注意的是,在这个 At Shell 环境中,其执行与终端机无关,所有的标准输出 stdout 和标准错误输出 stderr 都会被传送到执行者的 mailbox 中,若想在终端中看到信息,可以使用数据流重定向的方式来查看