调度作业

普通用户可以使用 crontab 命令来管理他们的作业。
可以通过四种不同的方式调用此命令:

Command作用
crontab -l列出当前用户的作业
crontab -r删除当前用户的所有作业。
crontab -e编辑当前用户的作业。
crontab [filename]删除所有作业,并替换为从 [filename] 读取的作业。如果未指定文件,则将使用标准输入。

如何编辑和查看 crontab

使用“crontab -e”编辑作业时,将启动编辑器(默认情况下为 vi。
除非 EDITOR 环境变量已设置为不同的内容)。
正在编辑的文件每行将有一个作业。
允许空行,注释以井号 (#) 开始。

# crontab -e

不带任何选项执行命令“crontab -e”时,默认编辑当前登录用户的crontab。
要编辑另一个用户的 crontab,我们可以在 crontab 命令中使用 -u 选项。
比如编辑用户john的crontab。

# crontab -u john -e

同样,要查看当前用户的crontab,使用“crontab -l”命令。

# crontab -l

要列出特定用户的 crontab,请使用以下命令。

# crontab -u john -l

处理输出

脚本通常会在屏幕上打印一些内容,用于调试、状态更新或者记录错误。
作业打印到屏幕上的任何内容都会通过电子邮件发送给当前用户,这可以用 crontab 中的 MAILTO 变量覆盖。

# crontab -l
MAIL=john
0 2 * * * /apps/bin/backup.sh

cron 作业示例

1. 每年 2 月 2 日安排工作

我们需要在每年 2 月的特定日期运行一次备份脚本。
语法如下所示。

0 9 2 2 *   /usr/local/bin/yearly_backup

2. 每天在第 5 分钟每小时安排一次工作

使用以下命令在每天的第 5 分钟每小时运行一个脚本:

5 * * * *      $HOME/bin/daily.job >> $HOME/tmp/out  2>&1

3. 每天午夜后 5 分钟安排工作

每天午夜后使用以下命令运行 5 分钟:

5 0 * * *      $HOME/bin/daily.job >> $HOME/tmp/out  2>&1

4. 在每个月的第一天的特定时间安排工作

使用以下命令在 2.15 P.M. 运行每个月的第一天:

15 14 1 * * *     $HOME/bin/monthly

5. 仅在工作日(周六和周日除外)的特定时间安排工作

使用以下命令在晚上 10 点运行在工作日:

0 22 * * 1-5  $HOME/bin/weekday.job >> $HOME/tmp/out  2>&1

6. 在单个 cron 作业中调度多个作业

我们还可以使用分号 (;) 分隔的作业在单个 cron 作业中安排多个作业,如下所示:

0 12 * * * /var/tmp/script01.sh; /var/tmp/script02.sh

7. 使用范围来指定开始时间

可以通过使用连字符来指定范围。
值 1-5 表示此字段对数字 1 到 5 有效。
如果使用名称而不是数字,则不能指定范围。
指定范围的示例如下所示。
作业计划从下午 3 点开始每小时运行一次。
到晚上 10 点

* 3-10 * * * /var/tmp/script.sh

8. 使用步长值指定开始时间

步长值可以与范围结合使用。
要指定步长值,请在范围后跟一个正斜杠 (/) 和一个数字。
指定的数字是步长值。
例如,以下指定应匹配每三个值(在本例中为 2、5、8 和 11):

* 0-12/3 * * *  /var/tmp/script.sh

步长值也可以与星号一起使用。
小时字段中的值 */3 将每三个小时匹配一次(0、3、6、9、12、15、18 和 21)。

9. 使用列表指定开始时间

列表也是可以接受的;列表中的每一项都用逗号分隔。
通常将列表与范围结合使用,如下所示:

1-15,31-45 * * * *  /var/tmp/script.sh

此示例匹配从 1 到 15 以及从 31 到 45 的所有数字(在我们的示例中为分钟)。
如果我们使用名称而不是数字,则无法指定列表。

10. 安排每个月 1 号、10 号和 22 号凌晨 4:45 的工作

下面显示的是在一个月的几个特定日期的特定时间运行作业的示例。

45 4 1,10,22 * * /apps/bin/backup.sh
在 Linux 中调度作业的 cron 示例

GNU/Linux 系统支持多个用于调度任务的实用程序。
cron 实用程序得到了最广泛的支持。
它允许我们安排任务定期在后台运行。
cron 实用程序使用一个表 (crontab),其中包含要执行的脚本或者命令以及执行时间的列表。

Crontab 宏

我们可以在 crontab 文件中添加宏。
例如,在每次重新启动后使用以下命令重新启动“my_script”:

@reboot  /var/tmp/my_script

以下是另外几个宏的总结:

Entry说明相当于
@reboot启动时运行一次None
@weekly每周运行一次0 0 * * 0
@daily每天运行一次0 0 * * *
@midnight(与@daily 相同)0 0 * * *
@hourly每小时运行一次0 * * * *

定时配置文件

cron 后台进程大多处于空闲状态。
它每分钟唤醒一次并检查 /etc/crontab、/etc/cron.d 和用户 cron 表文件,并确定是否有任何需要执行的作业。

下表总结了 cron 使用的各种文件和目录的用途。
了解这些文件和目录将解决任何问题并更详细地了解 cron。

File作用
/etc/init.d/crond在系统启动时启动 cron 守护进程。
/var/log/cron与 cron 进程相关的系统消息。用于故障排除问题。
/var/spool/cron/[username]用户 crontab 文件存储在 /var/spool/cron 目录中。
/etc/cron.allow指定可以创建 cron 表的用户。
/etc/cron.deny指定不允许创建 cron 表的用户。
/etc/crontab具有用于运行位于以下目录中的脚本的命令的系统 cron 表:/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly。
/etc/cron.d一个目录,其中包含需要按每小时、每天、每周或者每月以外的时间表运行的作业的 cron 表。
/etc/cron.hourly包含每小时运行的系统脚本的目录。
/etc/cron.daily包含每天运行的系统脚本的目录。
/etc/cron.weekly包含每周运行的系统脚本的目录。
/etc/cron.monthly包含每月运行的系统脚本的目录。
on it road .com

Crontab 语法

单个用户的作业存储在目录 /var/spool/cron 中与用户名匹配的文件中。
这些文件始终属于用户 root。
/var/spool/cron 中的文件不是直接编辑的。
相反,使用名为 crontab 的程序来操作它们。
下图显示了 cron 作业的语法。

文件中的每一行定义一个作业。
一行中有 6 个字段。
前 5 个字段定义时间,最后一个字段包含要运行的命令。
这可以是任何类型的命令或者 shell 脚本。
前 5 个字段具有以下格式:

字段范围
Minutes0-59
Hours0-23
Day of the Month1-31
Month0-12
Weekday0-7
日期:2020-09-17 00:14:55 来源:oir作者:oir