Linux 中的 Crontab:作业调度示例

Crontab,全称为 cron 表,是一个配置文件和命令,用于驱动定时任务。 Linux 作业调度。以下各节将解释 crontab 格式、添加、列出和删除作业的命令、特殊的 @ 字符串以及可直接使用的调度示例。
什么是 crontab?
Cron 的名字来源于希腊语“Chronos”,意为时间。它是一个系统进程(守护进程),可以按照设定的时间表自动执行任务。Cron 是一组用于运行定期计划任务的命令。Crontab 代表“cron 表”,它允许你使用 cron 作业调度程序来执行这些任务。
Crontab 也是用于编辑该计划任务的程序名称。它由 crontab 文件驱动——该文件是一个配置文件,列出了要按照指定时间表定期运行的 shell 命令。
为什么要使用定时任务?
以下是使用 Linux 系统中 cron 作业的主要原因:
- 按计划备份日志文件或数据库。
- 自动删除旧的日志文件。
- Archi执行并清除数据库表。
- 发送通知邮件,例如新闻简报或密码过期提醒。
- 定期清理缓存数据。
- 自动化执行重复性的 Unix 和 Linux 任务。
- 自动执行日常系统维护。
如何在 Linux 中使用 cron?
Linux 系统软件包包含一个名为 crontab 的实用任务调度器。crontab 之所以受欢迎,是因为它可以将任务调度为以 root 用户身份运行,从而简化了系统自动化更改。您只需更改一次任务,然后等待它按计划再次触发即可。
Linux Crontab 格式
Linux crontab 条目包含六个字段。前五个字段定义执行时间和日期,第六个字段包含要运行的命令。
Crontab 语法:
[Minute] [hour] [Day_of_the_Month] [Month_of_the_Year] [Day_of_the_Week] [command]
下图将 crontab 条目中的每个星号映射到它所控制的字段,从分钟到星期几,后面跟着要执行的命令。
五个时间字段接受以下值:分钟(0–59)、小时(0–23)、日期(1–31)、月份(1–12 或 1 月–12 月)和星期几(0–7,其中 0 和 7 都表示星期日)。您可以使用以下特殊字符控制每个字段:
- 星号 (*): 匹配该字段的所有可能值。
- 定义一个范围: 使用连字符设置范围,例如 1-10、30-40、jan-mar 或 mon-wed。
- 定义多个范围: 使用逗号连接日期范围,例如 apr-jun,oct-dec。
如何添加/修改 Crontab
用户可以使用以下 crontab 命令编辑自己的 crontab 任务。-u 选项指定特定用户的 crontab,因此请提供用户名,如后面的示例所示:
$ crontab -u -e
上面的命令会打开您系统的个人 crontab 配置,您可以使用默认文本编辑器对其进行编辑。
无需重启 cron;它会自动应用您的更改。要查看当前任务,请使用:
$ crontab -l
要删除 crontab 任务,请使用以下命令:
$ crontab -r
要在 crontab 中添加或更新任务,请使用以下命令:
crontab -e
要编辑其他用户的 crontab,请使用 -u 选项指定用户:
crontab -u username -e
如何列出 Crontab
查看当前用户的 crontab 条目:
crontab -l
要查看特定用户的 crontab 条目:
crontab -u username -l
重要的 crontab 示例
以下是一些重要的、可直接使用的 crontab 计划任务示例:
| 描述 | 命令 |
|---|---|
| 运行各项调度任务。以下命令每天早上 7 点和下午 5 点执行。 |
0 7,17 * * * /scripts/script.sh
|
| 每 5 分钟执行一次定时任务。 |
*/5* * * * * /scripts/script.sh
|
| 每隔一段时间执行一次任务 Monday 凌晨 5 点。这有助于执行系统清理等每周任务。 |
0 5 * * mon /scripts/script.sh
|
| 每隔 3 分钟运行一次脚本。 |
*/3 * * * * /scripts/monitor.sh
|
| 安排一个定时任务,在特定月份执行——这里是二月、六月和九月。 |
* * * feb,jun,sep * /script/script.sh
|
| 在选定的日期执行。此示例运行每个 Monday 以及星期三下午 5 点。 |
0 17 * * mon,wed /script/script.sh
|
| 允许 cron 在每个月的第一个星期六执行。 |
0 2 * * sat [ $(date +%d) -le 06 ] && /script/script.sh |
| 每隔 6 小时运行一次脚本,配置如下。 |
0 */6 * * * /scripts/script.sh
|
| 安排一个任务在某日执行两次 Monday 和星期二。使用以下设置来执行此操作。 |
0 4,17 * * mon,tue /scripts/script.sh
|
| 安排一个定时任务,每 15 秒执行一次。 |
* * * * * /scripts/script.sh * * * * * sleep 15; /scripts/script.sh |
| 按年安排任务。@yearly 类似于“0 0 1 1 *”。它会在每年的1月1日午夜运行一次任务——非常适合发送新年祝福。 |
@yearly /scripts/script.sh
|
| 每月运行一次任务。@monthly 类似于“0 0 1 * *”。它会在每个月的第一天午夜运行任务。 |
@monthly /scripts/script.sh
|
| 使用单个 cron 条目执行多个任务。 |
* * * * * /scripts/script.sh; /scripts/scrit2.sh |
| 每周安排任务。@weekly 类似于“0 0 * * 0”。它会在每周日午夜运行系统清理等每周例行任务。 |
@weekly /bin/script.sh
|
| 每日定时执行任务。@daily 类似于“0 0 * * *”,它会在每天午夜运行一次任务。 |
@daily /scripts/script.sh
|
| 每小时运行一次任务。@hourly 类似于“0 * * * *”,它会在每个整点开始时运行任务。 |
@hourly /scripts/script.sh
|
| 系统重启时运行任务。@reboot 参数适用于系统启动时需要运行的任务,可以让后台作业自动启动。 |
@reboot /scripts/script.sh
|

