atd 守护进程
atd 守护程序允许用户提交稍后执行的作业,例如“在凌晨 2:00”。
为了使用 atd 守护进程,它必须正在运行。
用户可以通过检查正在运行的进程列表来确认 atd 正在运行:
$ ps aux | grep atd daemon 4730 0.0 0.2 1420 532 ? S 15:42 0:00 /usr/sbin/atd madonna 5570 0.0 0.2 3572 640 pts/2 S 16:43 0:00 grep atd
请注意,第七列指定了进程与哪个终端相关联。
对于 blondie 的 grep 命令,终端是 pts/2,这可能是指 X 会话中的网络shell或者图形终端。
请注意,atd 守护程序没有关联的终端。
守护进程的定义特征之一是它断开与启动它的终端的关联。
批量延迟任务
批处理命令与 at 命令一样,用于将任务推迟到稍后的时间。
与 at 命令不同,batch 不会在特定时间运行该命令,而是等待系统不忙于其他任务,无论何时。
如果提交作业时机器不忙,作业可能会立即运行。
atd 守护进程监视系统的 loadavg,并在运行作业之前等待它降到 0.8 以下。
批处理命令的语法与 at 命令相同,其中的作业可以使用 stdin 指定,也可以使用 -f 命令行开关作为批处理文件提交。
如果指定了时间,批处理将延迟观察机器直到指定时间。
那时,batch 将开始监视系统的 loadavg,并在系统不忙时运行该作业。
提交作业
at 命令用于将作业提交给 atd 守护程序以在特定时间运行。
要运行的命令或者作为脚本提交(使用 -f 命令行开关),或者直接通过 stdin 输入。
命令的标准输出被邮寄给用户。
at [-f filename | -m] TIME
Switch | Effect |
---|---|
-f filename | run the script specified by filename |
-m | Notify the user by email when done, even if there is no output. |
可以使用 HH:MM 指定一天中的时间,后缀为“am”或者“pm”。
也可以使用术语“午夜”、“中午”和“下午茶时间”。
(我们没看错,“下午茶时间”。
)还可以使用多种格式指定日期,包括 MM/DD/YY。
at(1) 手册页提供了更多详细信息。
摔跤手霍根想要打印一个包含他收到的所有粉丝邮件的文件 fanmail.txt。
不过,他有点担心,因为他与经常使用打印机的文图拉共用打印机。
为了避免打架,霍根决定将打印时间推迟到凌晨 2:00。
$ at 2:00 am warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at> lpr fanmail.txt at> CTRL-D job 7 at 2020-06-17 02:00
因为 hogan 没有使用 -f 命令行开关,at 命令提示 hogan 使用 stdin(键盘)输入他的命令。
幸运的是,hogan 知道 CTRL-D 在直接从终端输入时表示“文件结束”。
或者,他可以直接将命令通过管道输入标准输入:
$ echo "lpr fanmail" | at 2:00 am warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh job 7 at 2003-06-17 02:00
接下来,hogan 确认他的工作已使用 atq 注册。
$ atq 7 2003-06-17 02:00 a hogan
最后,霍根记得文图拉正在休假,所以他可以顺利打印他的粉丝邮件。
他决定取消他的 at 工作,直接打印文件。
$ atrm 7 $ atq $ lpr fanmail.txt