cronie - 定时任务
先决条件¶
- 运行 Rocky Linux 的计算机
- 了解如何在命令行环境中使用您喜欢的编辑器更改配置文件(本文将使用
vi
) - 您已经了解 bash、python 或其他脚本或编程工具的基本知识,并希望自动运行脚本
- 您已通过 SSH 连接到您的计算机(可以是 root 用户或 UID 大于 1000 的普通用户)
cron
简介¶
GNU/Linux 提供 cron 系统,这是一个基于时间的 cron
作业程序,用于自动执行流程。它并不难,但功能强大。您想让脚本或程序每天下午 5 点运行吗?cron
可以做到。cron
有不同的分支(或变体),它们具有相同的功能。本文档使用 cronie,版本为 1.5.2。点击 这里 找到最新版本并更新日志。
cronie
描述¶
- cronie - 包名称,Rocky Linux 默认包含 cronie
- crontab - 用于维护每个用户的
crontab
(任务计划)的命令 - crond.service - cronie 的守护进程,您可以通过
systemctl start | restart | stop | status
来管理守护进程 - /etc/crontab - 将 cron 作业分配给不同的用户,通常我们更习惯使用
crontab -e
。例如,如果您当前以 root 用户身份登录,键入crontab -e
,您将在保存后看到文件 /var/spool/cron/root 中的特定 cron 作业。 - /var/log/cron * - cronie 的日志,默认情况下,它会进行日志轮转,并以日期后缀结尾。这里,它意味着通配符。
- anacron - cronie 的一部分。有关
anacron
的更多信息,请参见 anacron-automation 命令.
crontab
命令¶
crontab
是在安装 cronie 包后获得的命令。与 anacron
相比,它更适合 24/7 运行的服务器。crontab
的常见选项是
-e # edit crontab scheduled tasks
the -l # View crontab task
-r # delete all the current user's crontab tasks
使用 cronie¶
将命令或脚本写入此文件可以使它们在不同的时间运行。但是,通常我们更习惯使用 crontab -e
。
shell > cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0-59)
# | .------------- hour (0-23)
# | | .---------- day of month (1-31)
# | | | .------- month (1-12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
参数 | 意义 | 值范围 |
---|---|---|
第 1 个* | 小时的第一分钟 | 0-59 |
第 2 个* | 一天中的小时 | 0-23 |
第 3 个* | 一个月中的日期 | 1-31 |
第 4 个* | 一年中的月份 | 1-12 |
第 5 个* | 一周中的日期 | 0-7 (0 和 7 都表示星期日) |
在下面的示例中,假设您以 root 用户身份执行此操作,键入以下内容
crontab -e
将显示 root 用户的定时任务。如果您使用vi
作为默认系统编辑器,请按 I 键进入插入模式。- "#" 表示这是一行注释。
# Nightly 10:00 backup system
00 22 * * * /usr/local/sbin/backup
- 输入此行后(再次假设
vi
是系统编辑器),请按 Esc 退出插入模式 - 使用 Shift+:+w+q+! 保存并退出您的文件(显示在编辑器的底部)
脚本将在每天晚上 22:00 运行。这是一个简单的示例。如果您需要更复杂的东西,事情可能会变得更加复杂。
注意
脚本需要具有执行权限(chmod +x
),cronie 才能运行它。
复杂选项¶
到目前为止讨论的内容是简单的选项,但是更复杂的定时任务呢?
# Suppose you want to run every 10 minutes backup script (may be impractical, however, it is only an example!) Throughout the day. To this end, the following will be written:
* /10 * * * * /usr/local/sbin/backup
#What if you only want to run a backup every 10 minutes on Monday, Wednesday, and Friday? :
* /10 * * * 1,3,5 /usr/local/sbin/backup
# In addition to Saturdays and Sundays, once every 10 minutes, every day, how to back up?
* /10 * * * 1-5 /usr/local/sbin/backup
特殊符号 | 意义 |
---|---|
* | 代表任何时间。例如,第一个 * 表示任何分钟,第二个 * 表示任何小时 |
, | 表示不连续时间,例如 0 8,12,16 * * * ,这意味着该命令将在每天的 8:00、12:00 和 16:00 运行一次 |
- | 表示一个连续的时间范围,例如 0 5 * * 1-6 ,这意味着一个命令将在周一到周六的每天早上五点运行 |
*/n | 表示间隔运行的频率,例如 */10 * * * * 表示每 10 分钟运行一次 |
注意
cronie 可以识别的最小时间单位是 1 分钟;例如,当使用 30 4 1,15 * 5 command
时,它将导致命令在每个月的 1 日和 15 日以及每个周五凌晨 4:30 运行;一些脚本或命令的输出信息将阻止定时任务的执行,需要进行输出重定向,例如:*/10 * * * * /usr/local/sbin/backup &> /dev/null
问答¶
- /etc/crontab 和
crontab -e
,这两种方法之间有什么区别?crontab -e
不需要指定用户(默认情况下使用当前登录的用户),而 /etc/crontab 需要指定用户。 - 如果指定的命令或脚本未正确运行,该怎么办?检查 /var/log/cron* 文件,使用
journalctl -u crond.service
检查有关守护进程的信息,以及脚本是否具有 x 权限等,以进行故障排除。 - 除了 cronie 之外,还有哪些 cron 变体?fcron,最新版本为 3.3.0(开发版,2016-08-14)。cronsun,最新版本 0.3.5(2018-11-20)。
总结¶
对于 Rocky Linux 桌面用户或系统管理员来说,cronie 是一个强大的工具。它允许自动化任务和脚本,因此您不必记住手动运行它们。尽管基本知识并不难,但任务可能很复杂。有关 crontab
的更多信息,请访问 crontab 手册页。您也可以在互联网上搜索“crontab”,它会提供很多搜索结果,帮助您微调 crontab
表达式。
作者:田思礼
贡献者:史蒂文·斯宾塞,甘纳·齐尔诺娃