Alex_McAvoy

想要成为渔夫的猎手

Linux 单一工作调度

【单一工作调度】

在 Linux 中,存在两种工作调度方式,一种是例行性的,即每隔一定周期执行的工作,另一种是突发性的,即这次工作完成后就结束调度

在 Linux 中,单一工作调度依靠 atd 服务的支持,通过 at 命令来实现

at 命令用于生成要运行的工作,并将这个工作以文本文件的方式写入 /var/spool/at/ 目录内,之后该工作便等待 atd 这个服务的取用与执行

考虑安全性的问题,并非所有用户都可以使用 at 工作调度,可以利用 /etc/at.allow/etc/at.deny 这两个文件来对 at 进行使用限制

  1. 寻找 /etc/at.allow 这个文件,写在这个文件内的用户才能使用 at 命令
  2. /etc/at.allow 不存在,就寻找 /etc/at.deny 文件,没有在该文件中声明的用户均可以使用 at 命令
  3. 若两个文件均不存在,则只有 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 中,若想在终端中看到信息,可以使用数据流重定向的方式来查看

感谢您对我的支持,让我继续努力分享有用的技术与知识点!