计划任务

1 非周期性计划任务

at 是非周期性计划任务的命令。使用它之前必须开启 atd 服务,该服务默认关闭。

service atd start
chkconfig atd on
[root@www ~]# at 08:08 2008-08-08
at> /sbin/shutdown -h now
at> <EOT>    <- Ctrl+D
job 1 at 2008-08-08 23:00

[root@www ~]# at now + 5 minutes
at> /sbin/shutdown -h now
at> <EOT>
job 2 at 2008-08-08 08:08
at -c (jobnumber)    # 查看任务
atq    # 查看任务队列
atrm (jobnumber)    # 移除任务

要么使用环境变量,要么使用绝对路径。

batch 是特殊的 at 命令,当系统空闲即 CPU 负载小于 0.8 时,它才会执行。负载是 CPU 在单一时间点所负责的工作数量,不是 CPU 使用率。

2 周期性计划任务

crontab 是周期性计划任务的命令。

crontab -e    # 编辑当前用户的任务列表
crontab -l    # 查看当前用户的任务列表

vim /etc/crontab    # 编辑系统的任务列表

条目基本语法 * * * * * command ,周与日月不可并存,最小计时单位为分。

cron

同上,要么使用环境变量,要么使用绝对路径。

anacron 是特殊的 crontab 命令,用于亡羊补牢,即检测停机期间未能如期执行的任务并将它们执行一遍。

3 流程

at 命令的计划任务保存在 /var/spool/at/ 目录下,等待 atd 取用; crontab 命令的计划任务保存在 /var/spool/cron/ 目录下,等待 crond 取用。 /var/spool/cron/ 目录按用户划分子目录,如 xxx 的周期性计划任务保存在 /var/spool/cron/xxx 目录下。文件禁止 vi 编辑。允许以文件的形式导入计划任务表,导入后完全覆盖原有内容。

/etc/at.allow/etc/at.deny 控制 at 命令的权限;/etc/cron.allow/etc/cron.deny 控制 crontab 命令的权限。 /etc/xxx.allow 的优先级高于 /etc/xxx.deny ,若两者皆无,则仅允许 root 执行。建议二选一,系统默认 /etc/xxx.deny

输出结果以邮件的形式发送到本地邮箱。本地邮箱可以用系统命令 mail 查看,如果找不到该命令,就安装一个 mailx(mailutils)

我们还可以借助 Thunderbird 更友好地交互,设置方法比较特别,步骤如下:

  1. 取消所有向导。
  2. Alt+E 编辑,账户设置。
  3. 点开 Account Actions 添加其它账户。
  4. Unix Mailspool ,下一步。
  5. 填写收件表单,用户名就是本地用户名。下一步。
  6. 填写发件表单,随意填写,如 stmp.localhost 。下一步。
  7. 确认账户名称,下一步。
  8. 完成设置,开始收件。