类型:Linux发行版
简介:与RHEL完全兼容,具有企业级稳定性及开源等优势。
在Rocky Linux上,定时任务的管理由Cronie完成。Cronie是一个基于时间的自动化任务调度工具,它可以自动化地按预定时间执行命令或脚本。本文将帮助大家了解如何使用Cronie定时任务(crontab)来自动运行脚本。
一、环境要求
1、一台运行 Rocky Linux 的计算机。
2、熟悉如何使用命令行编辑器(本文将使用 “vi”)。
3、基本的 bash、Python 或其他脚本/编程语言的知识。
4、你已通过 SSH 登录到系统,且有权限(root 或 UID 大于 1000 的普通用户)。
二、Cronie简介
Cronie 是 Linux 系统中用于定时任务调度的服务。它通过一个守护进程(”crond”)来执行任务,并且支持周期性地运行脚本。Cronie 的相关组件如下:
1、cronie:任务调度的主程序包,Rocky Linux 默认包含。
2、crontab:每个用户用来管理定时任务的命令。
3、crond.service:Cronie 的守护进程,可以通过 “systemctl” 命令进行管理(启动、停止、重启等)。
4、/etc/crontab:系统级别的 cron 配置文件,允许管理员分配任务给不同用户。
5、/var/spool/cron/:保存每个用户的定时任务文件。
6、/var/log/cron:Cronie 的日志文件。
三、Crontab命令
“crontab” 是安装 Cronie 后获得的命令,常用选项包括:
-e # 编辑定时任务 -l # 查看定时任务 -r # 删除当前用户所有 crontab 任务
四、使用Cronie
要使用 Cronie 定时任务,可以编辑用户的 crontab 文件。通常我们使用 “crontab -e” 命令编辑定时任务。
shell > cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 注意: 所有 # 开头的行都是注释说明, 可随意修改添加 # 默认 * 代表所有, 比如每一分钟/每一小时/每一天均执行命令 # 更多说明详见 man 4 crontabs # 任务定义示例: # .---------------- 指定分钟 (0-59) # | .-------------- 指定小时 (0-23) # | | .------------ 每月第几天 (1-31) # | | | .---------- 指定月份 (1-12) 或月份前三个字母缩写 jan,feb,mar,apr ... # | | | | . ------- 每周第几天(0-6) (周日=0 或 7) 或者 sun, mon, tue, wed, thu, fri, sat # | | | | | # * * * * * 要执行的用户名 要执行的命令
在 crontab 文件中,每一行的格式如下:
示例:每天晚上 10 点执行备份脚本
假设你希望每天晚上 10 点执行一个备份脚本,首先运行:
crontab -e
然后在编辑器中输入以下内容:
00 22 * * * /usr/local/sbin/backup
这行命令表示每天晚上 10 点(22:00)执行 “/usr/local/sbin/backup” 脚本。编辑完成后,按下 “Esc” 键退出插入模式,然后输入 “:wq” 保存并退出。
注意:要确保脚本具有可执行权限,否则定时任务不会执行。可以通过 “chmod +x /usr/local/sbin/backup” 命令来赋予脚本执行权限。
复杂选项:
如果你需要设置更复杂的定时任务,Cronie 提供了多种选项:
1、每 10 分钟执行一次备份:
*/10 * * * * /usr/local/sbin/backup
2、每周一、三、五每 10 分钟执行备份:
*/10 * * * 1,3,5 /usr/local/sbin/backup
3、每天 10 分钟一次(但不在周六和周日):
*/10 * * * 1-5 /usr/local/sbin/backup
五、Cronie表达式解析
1、*:代表所有时间单位。例如,第一个 “*” 表示任意分钟,第二个 “*” 表示任意小时。
2、,:表示多个非连续的时间。例如,”0 8,12,16 * * *” 表示每天 8:00、12:00 和 16:00 执行。
3、-:表示一个连续的时间范围。例如,”0 5 * * 1-6″ 表示每周一至周六的 5 点执行。
4、*/n:表示执行频率间隔。例如,”*/10 * * * *” 表示每 10 分钟执行一次。
输出重定向:
定时任务运行时可能会产生输出,这些输出有时会导致任务执行失败。为了避免这种情况,可以将输出重定向到 “/dev/null”:
*/10 * * * * /usr/local/sbin/backup &> /dev/null
六、常见问题解答
1、”/etc/crontab” 和 “crontab -e” 有什么区别?
- “crontab -e” 编辑的是当前用户的定时任务,系统不需要显式指定用户;
- “/etc/crontab” 是系统级别的 cron 配置文件,需要明确指定执行任务的用户。
2、定时任务没有执行怎么办?
- 检查 “/var/log/cron*” 日志,查看任务是否被触发;
- 使用 “journalctl -u crond.service” 查看 “crond” 守护进程的日志;
- 确保脚本有执行权限(”chmod +x”);
- 确保任务没有报错或产生输出阻止执行,必要时使用输出重定向。
3、除了 Cronie,还有其他类似的 cron 变体吗?
- “fcron”(最新版本为 3.3.0,2016年8月14日发布)
- “cronsun”(最新版本为 0.3.5,2018年11月20日发布)