Cron 由 Anacron 运行,Anacron 特别适用于那些并非始终开机的计算机(如工作站和笔记本电脑)。在这篇文章中,我们将简要讨论 Anacron 与 Cron 的关系,以及如何使用 cron 和 crontab 自动处理任务。
一、前提条件
1、一台运行 Rocky Linux 的计算机。
2、使用自己喜欢的编辑器(例如 “vi”)从命令行修改配置文件的能力。
3、基本的编程知识,了解 Python 或其他脚本工具,并希望自动执行脚本。
4、以超级管理员身份运行,或使用 “sudo -s” 获取权限。在用户的私人目录中运行某些脚本时,可以不切换到 root。
二、Cron和Crontab介绍
1、Cron
Linux 提供了一个基于时间的作业调度系统——Cron,用于流程自动化。它功能简单,却相当强大。想要设置一个脚本或程序在每天下午 5 点运行?Cron 使这一过程变得轻而易举。
2、Crontab
Crontab 本质上是一个任务列表,用户可以在其中添加自己的自动化任务。它提供了许多选项以简化任务管理。这篇文章将探讨一些基础知识,供有经验的用户温习,同时也为新用户提供学习 Cron 系统的机会。
3、Anacron与Cron的关系
Cron 会按照计划运行任务,但如果计算机在任务计划执行时处于关闭状态,任务将不会运行。当计算机再次开启时,Anacron 将接管这些任务并执行,即使它们的计划时间已经过去。然而,Anacron 使用一种更随机的方式来执行任务,这对于非服务器环境是合适的,但在特定时间需要执行任务的服务器上,这可能是一个问题。因此,Cron 为服务器管理员提供了最佳的解决方案。不过,服务器管理员以及工作站或笔记本电脑用户都可以从这两种方式中受益,并可根据需求灵活选择。
4、Cron开头的目录
许多 Linux 系统内置了以 “cron.” 开头的目录,便于快速自动化进程。这些目录中的脚本将被 Cron 根据命名约定调用。具体的运行方式将根据调用它们的进程而有所不同。如果服务器管理员希望以严格的时间表运行任务,可以调整默认行为,以便使用 Cron 而非 Anacron。
(1)服务器配置
如前所述,Cron 通常使用 Anacron 服务来运行这些目录中的脚本。但如果希望在服务器上使用这些目录,则可以采取以下步骤,确保它们按严格的时间表运行:
安装 “cronie-noanacron” 软件包并删除 “cronie-anacron”:
dnf install cronie-noanacron dnf remove cronie-anacron
这将从服务器上移除 Anacron,确保任务按严格的时间安排执行。
在 “/etc/cron.d/dailyjobs” 文件中,你可以设置如下内容以控制具体时间表:
# 如果未安装 cronie anacron,则运行每日、每周和每月作业 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 运行模块 02 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily 22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly 42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly
当前配置将转化为以下内容:
- 每天 04:02:00 运行 “cron.daily” 目录下的所有脚本;
- 每周日 04:22:00 运行 “cron.weekly” 目录中的所有脚本;
- 每月的第一天 04:42:00 运行 “cron.monthly” 目录中的所有脚本。
(2)工作站配置
如果希望在工作站或笔记本电脑的 “cron.” 开头的目录中添加脚本文件,无需复杂的操作,只需将脚本文件复制到相应的目录,并确保它们是可执行的。以下是这些目录:
- “/etc/cron.hourly”:该目录下的脚本每小时运行一次(由 Cron 运行,无论 Anacron 是否存在);
- “/etc/cron.daily”:放在此目录内的脚本每天运行一次,Anacron 调整这些任务的执行时间;
- “/etc/cron.weekly”:放在此目录内的脚本每 7 天运行一次,基于上次运行时的时间;
- “/etc/cron.monthly”:放在此目录内的脚本每月运行一次,基于上次运行的时间。
注意:
- 这些脚本可能每天、每周和每月都会在类似(但并非完全相同)的情况下运行;
- 只要能确保系统能够自动运行脚本,并允许它们在指定的时间范围内执行,便可以实现任务自动化;
- 并非所有服务器管理员都不能使用 Anacron;实际上,在 “cron.” 开头的目录中以随机时间范围运行脚本的方式是允许的。这在处理对时间不敏感的脚本时尤为有用。结合 Anacron 和 Cron,可以根据实际需要灵活管理任务调度。
三、创建和管理Cron任务
Cron 是一个强大的作业调度工具,允许用户在指定的时间自动执行任务。在 Linux 系统中,可以轻松创建自己的任务计划。以下将介绍如何以 root 用户的身份创建、编辑和管理 Cron 任务,以及如何利用 Cron 特性实现更复杂的调度。
1、创建Cron任务
如果发现自动随机时间或基于计划的时间执行任务的方法无法满足需求,可以通过以下步骤创建自己的 Cron 任务。要创建自己的 cron,请输入以下内容:
crontab -e
将会拉取 root 用户的 crontab 内容,将会显示在你选定的编辑器中,看起来像这样。 继续阅读里面的注释内容,因为它包含了我们下一步操作的说明:
# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any'). # # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # cron # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command
请注意,特定的 crontab 文件内置了一些文档,指导如何添加任务。在极简主义操作系统或容器中,crontab 可能是空的,除非已有计划任务。
2、添加备份任务
假设有一个名为 “backup” 的备份脚本,位于 “/usr/local/sbin” 目录中,希望它在晚上 10 点执行。Cron 使用 24 小时制,所以时间为 22:00。
首先,确保备份脚本具有可执行权限:
chmod +x /usr/local/sbin/backup
然后,在 crontab 文件末尾添加以下内容:
# 每晚在 10 点备份系统 00 22 * * * /usr/local/sbin/backup
这条命令表示每天晚上 10 点(22:00)执行备份脚本。
3、查看当前任务
可以使用以下命令列出当前正在运行的任务:
crontab -l
如果想查看某个特定用户创建的所有任务,可以使用:
crontab -l -u <username>
使用 @options 进行更简单的调度
Cron 还支持 @options,让任务调度更加简便。以下是可用的选项:
- “@hourly”:每小时的0分钟执行;
- “@daily”:每日午夜执行;
- “@weekly”:每周日午夜执行;
- “@monthly”:每月第一天午夜执行;
- “@yearly”:每年一月第一天午夜执行;
- “@reboot”:系统启动时执行一次。
例如若想在午夜运行备份脚本,可以按以下方式添加任务:
@daily /usr/local/sbin/backup
4、复杂选项示例
如需在一天中每 10 分钟运行一次备份脚本,可以使用以下命令:
*/10 * * * * /usr/local/sbin/backup
如果只想在周一、周三和周五运行:
*/10 * * * 1,3,5 /usr/local/sbin/backup
如果想每天(除了周六和周日)每 10 分钟运行一次,可以写成:
*/10 * * * 1-5 /usr/local/sbin/backup
Cron 和 crontab 系统是 Rocky Linux 系统管理员及桌面用户的强大工具,能够简单有效地自动化任务和脚本的执行。虽然基础操作相对容易,但选项的使用有时会变得复杂,因此建议在制定计划时花时间仔细思考。对于那些并非 24 小时运行的机器,还可以探索 Anacron 以实现命令的自动化。