Cron 是一个功能强大的计时器,可让您安排命令和脚本并定期运行它们。该脚本计划在 crontab 文件中运行很容易。
在某些 Linux 发行版中,例如 Arch Linux,默认情况下不安装 cron,因为它们使用 systemd 而不是 cron。 此外,还有不同的使用 cron 的方法,每个选项都有一种编辑或安排自己工作的方法。本教程将重点介绍 cronie,这是大多数 Linux 发行版(如 Ubuntu)中的默认选项。
在 Linux 中使用 Cron 调度任务
- 查看 cron 项目
- 编辑 cron 条目
- 短代码
- 以其他用户身份编辑 cron 条目
- 查看 cron 活动
查看 cron 项目
查看 crontab 允许用户查看将在帐户中运行的计划任务。
crontab-l
用户还可以使用 sudo 查看 root 帐户的计划任务。
sudo crontab-l
编辑 cron 条目
如果你从来没有在cron中设置过任务,这个文件会是空的或者有一些注释。要添加项目,请使用 -e 选项 .
打开 crontab 文件 crontab-e
Crontab 条目将始终遵循相同的语法,允许用户在任何机器上检查项目并以编程方式创建它们。
crontab输入表达式的基本语法是:
mhd mon dow 命令
- m=分钟(0 到 59 之间)
- h=小时(从 0 到 23)
- d=一个月中的某天(从 1 到 31)
- mon=月份(从 1 到 12)
- dow=星期几(从 0 到 6)。 0 是星期日。
- 命令=运行命令。
比如你需要运行一个常规的命令来检查mysql服务器是否运行良好。要执行命令运行数小时,请使用以下语法:
0 * * * * mysqlcheck--all-databases--check-only-changed--silent
这意味着该命令将每小时运行一次。如果你只希望它在每天凌晨 1 点 42 分运行,那么命令将变为:
42 1 * * * mysqlcheck--all-databases--check-only-changed--silent
此外,逗号可用于列出许多项目(例如1、3、5),连字符可用于范围。在表达式中某个项目的位置使用特殊星号表示该项目将针对该字段的所有值运行。 (小时字段中的星号表示命令将每小时运行一次,从 0 到 23。)一行上的井号 (#) 表示这是一个注释(表示代码行不会被执行)。
最后,正斜杠表示步长值(每次迭代后值增加)。例如,每 5 分钟将指示为 */5(因为保存了 crontab 并创建了重复任务)。如果只使用“5”,则该条目将只运行 5 分钟。
例如:
34 3 * * 0 mysqlcheck--all-databases--check-only-changed--silent
- 34 :在 0 到 59 之间运行的分钟数
- 3 :小时,从 0 到 23
- * :中间的两个星号表示该命令将每天(1 到 31)和每月(1 到 12)运行
- 0:最后一个数字 0 表示该命令将在星期日运行的日期
这个任务将在每个月的凌晨 3:34 运行,每周的周日运行。
短代码
Crontab 允许用户使用一些短代码使 cron 条目更易于阅读。
- @reboot-启动时运行一次
- @yearly-每年运行一次,'0 0 1 1 *'。
- @annual-喜欢@yearly
- @monthly-每月运行一次,'0 0 1 * *'
- @weekly-每周运行一次,'0 0 * * 0'
- @daily-每天运行一次,'0 0 * * *'
- @midnight-比如@daily
- @hourly-每小时运行一次,'0 * * * *'
例如:
@hourly mysqlcheck--all-databases--check-only-changed--silent
以其他用户身份编辑 cron 条目
有时用户需要添加具有root权限的crontab。例如,要自动应用 Let's Encrypt SSL 证书,请以 root 权限运行更新脚本。要以 root 身份编辑 crontab,只需在命令前添加 sudo:
sudo crontab-e
同样,可以使用 -u 标志 : 以另一个用户的角色在 cron 中安排作业
sudo crontab-u 用户名-e
例如,要以 'www-data' 用户身份运行重复作业,请使用以下命令:
sudo crontab-u www-data-e
查看 cron 活动
现在特定的命令或脚本已经设置好了,但是用户需要确保它们运行。集成到 cron 意味着一旦命令运行,cron 将给所有者发送电子邮件。这可以通过 MAILTO 变量 进行更改。
添加 MAILTO=yourremail@yourdomain.com 会将所有重复的工作报告发送到指定的电子邮件。这个变量通常可以在 crontab 编辑屏幕的顶部找到。但是,如果它不存在,用户可以自己添加变量,它会按预期工作。
许多电子邮件地址可以用逗号分隔。如果您需要将电子邮件发送到其他位置,请在命令正上方添加 MAILTO 命令。以下命令 MAILTO 将被发送到新地址。如果 MAILTO= 留空,则消息将发送给 cron 部分的所有者。
或者,您可以使用重定向运算符 (>) 在需要时发送输出。
34 3 * * 0 mysqlcheck--all-databases--check-only-changed--silent >/dev/null
上述命令会将输出重定向到'/dev/null',,无需通过电子邮件发送和删除输出。
如果你想确保工作已经完成但不想收到邮件,用户也可以查看cron log。在大多数系统上,访问 cron 日志需要 超级用户 权限。 可以在 '/var/log' 中找到 Cron 日志。 cron 或syslog 文件将显示 cron 条目的日志。
sudo grep crontab syslog
Cron 可以进一步缩小以允许特定用途,并且可以设置默认选项。总之,cron 是一种工具,它为用户提供了舒适地运行任务并确保系统组件由用户自行决定定期维护的能力。
评论