第 18 章。计划在后台运行的命令

有两个主要的工具用于执行计划任务,atcron。 如果您的计算机不是持续运行的,您可能也想尝试 anacron,因为 cron 仅在您的计算机保持开启状态时才有效(anacron 可以在下次计算机开启时赶上计划的任务...)。

at

'at' 在特定的某一天、特定的时间执行一次命令。 at 将添加一个特定的命令以供执行。

示例

at 21:30

然后输入您要执行的命令,然后按文件结束键(通常是 CTRL-D)。 也可以尝试

at now + time

这将会在当前时间 + 您指定的小时/分钟/秒后运行(使用 at now + 1 hour 以在 1 小时后运行命令...)

您还可以使用 -f 选项让 at 执行一个特定的文件(一个 shell 脚本)。

at -f shell_script now + 1 hour

这将会在 1 小时后运行该 shell 脚本。

atq

将列出当前在队列中等待执行的作业,如果 root 执行 at,它将列出 at 守护程序队列中的所有作业。 不需要或接受任何选项。

atrm

将从 'at' 队列中删除一个作业。

命令语法

atrm job_no

将删除作业 “job_no”(使用 atq 查找作业编号)

cron

cron 可用于计划一个特定的功能,使其每分钟、每小时、每天、每周或每月发生。

通常使用 crontab 来执行编辑功能,因为这自动化了 cron 守护程序的过程,并使普通用户更容易使用 cron。

TipAnacron
 

anacron 是另一个为非持续运行的系统设计的工具,例如家用电脑

虽然 cron 在计算机关闭时不会运行,但 anacron 会在计算机下次开启时简单地运行该命令(它会赶上错过的任务)。

crontab

crontab 用于编辑、读取和删除 cron 守护程序读取的文件。

crontab 的选项(使用 crontab -选项

  • -e --- 编辑文件。

  • -l --- 列出文件内容。

  • -u 用户名 --- 使用 -u 和用户名参数来处理其他用户的 crontab 文件。

当使用 crontab -e 时,您有多个字段 (6),它们的含义如下所示

字段

允许的值

分钟

0-59

小时

0-23

月份中的天

1-31

月份

1-12(或名称,见下文)

星期几

0-7(0 或 7 是星期日,或使用三个字母的名称)

还有许多用于常见任务的快捷方法,包括:[1]

  • @reboot --- 在重启时运行命令

  • @yearly --- 与 0 0 1 1 * 相同

  • @annually --- 与 @yearly 相同

  • @monthly --- 与 0 0 1 * * 相同

  • @weekly --- 与 0 0 * * 0 相同

  • @daily --- 与 0 0 * * * 相同

  • @midnight --- 与 @daily 相同

  • @hourly --- 与 0 * * * * 相同

[2]

请注意,*(星号)用于表示任何内容(类似于通配符)。 例如,如果您将日期部分(第 5 位)留为星号,则表示每天。

允许列表。 列表是一组由逗号分隔的数字(或范围)。 示例:``1,2,5,9''、``0-4,8-12”。

步长值可以与范围结合使用。 在范围后跟 ``/<number>'' 指定在范围内跳过数字的值。 例如,``0-23/2'' 可用于小时字段中,以指定每隔一小时执行一次命令(V7 标准中的替代方法是 ``0,2,4,6,8,10,12,14,16,18,20,22'')。 星号后也允许步长,因此如果您想说“每两小时”,只需使用 ``*/2''。

在编写 crontab 条目时,您只需输入六个以空格分隔的字段,前五个是在表格中列出的字段(使用数字或字母和数字,视情况而定),第 6 个字段是要执行的命令和任何选项,cron 将读取所有内容直到换行符。

示例

5 4 * * sun echo "run at 5 after 4 every sunday"

这将会在每个星期日 4:05 运行带有显示字符串的 echo 命令。

注意

[1]

此信息来自 LinuxChix techtalk 邮件列表上的帖子(未经编辑),有关更多信息,请参阅 参考书目 中的 [16]。

[2]

此信息来自 cron 手册页,并进行了一些小的补充(未更改原始内容),有关更多信息,请参阅 参考书目 中的 [13]。