一次性定时任务 at
at 为一次性定时任务命令,该命令会将作业提交到队列中,指定 shell 何时运行这些命令。at 的守护进程 atd 会以后台模式运行,检查作业队列来运行作业。atd 守护进程会检查系统上的一个特殊目录来获取 at 命令的提交的作业。
默认情况下,atd 守护进程每 60 秒检查一次目录。有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
权限控制
/etc/at.allow 与 /etc/at.deny 这两个文件负责 at 命令权限控制。at 实际工作流程如下:
- 先寻找 /etc/at.allow ,如果存在(白名单模式),写在这个文件中的 user 才能使用
at,没有在这个文件中的 user 不能使用at,/etc/at.deny 在此情况下无用 - 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny (黑名单模式),写在其中的 user 不能使用
at - 如果两个文件都不存在(root 模式),只有 root 可以使用
at命令
/etc/at.allow 管理较为严格,而 /etc/at.deny 则较为松散。大多数 distributions 假设系统上的所有 user 都是可信任的,系统通常会保留一个空的 /etc/at.deny 文件,即允许所有人使用 at 命令。
使用与管理
终端打印 Hello 消息
$ at now + 5 minutes
at> echo "Hello" > /dev/pts/0
at> echo "Another msg" > /dev/pts/0
<EOT> # 敲 Ctrl+D
job 4 at Mon May 4 13:55:00 2020
$ at -c 4 # 查看任务4详情,输出环境变量+命令本身
$ atq * # 查看所有任务号与时间
$ atrm 4 # 移除任务4
闲时任务 batch
batch 本质仍然是用 at 下达命令,不同处在于:他是在 CPU 工作负载 < 0.8 时才执行任务。
CPU 负载即 CPU 在单一时间点所负责的工作数量(不是 CPU 使用率)。For example,有一个计算密集型任务,运行时 CPU 的使用率到达 100% ,但工作负载则是接近 1 ,因为 CPU 仅负责一个工作;如果同时运行两个这样的任务,使用率仍是 100% ,但工作负载则变成 2。
范例一:机房停电在 2020/5/5 23:00 关机,但若当时系统负载太高,则暂缓运行
$ batch 23:00 2020-5-5
at> sync
at> sync
at> shutdown -h now
at> <EOT>
job 6 at 2009-03-17 23:00
$ atq
6 2009-03-17 23:00 b root
闲时任务也是用 atq, atrm 来管理
周期任务 cron
cron 是 Linux 定时执行工具,可以在无需人工干预的情况下运行作业。cron 是被默认安装并启动的。通过 /etc/crontab 文件,可以看到以下内容: