第 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。

Anacron: 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]。