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-自动化命令。
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
参数 | 含义 | 值范围 |
---|---|---|
第一个* | 小时内的分钟 | 0-59 |
第二个* | 一天中的小时 | 0-23 |
第三个* | 月份中的日期 | 1-31 |
第四个* | 一年中的月份 | 1-12 |
第五个* | 一周中的日期 | 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 (dev, 2016-08-14)。cronsun,最新版本 0.3.5 (2018-11-20)。
总结¶
对于 Rocky Linux 桌面用户或系统管理员来说,cronie 是一个强大的工具。它允许自动化任务和脚本,这样您就不必手动记住去运行它们。虽然基本知识并不难,但任务可能会很复杂。有关 crontab
的更多信息,请访问 crontab man page。您也可以在网上搜索“crontab”,它会提供许多搜索结果,帮助您微调 crontab
表达式。
作者:李天赐
贡献者:Steven Spencer, Ganna Zhyrnova