Cron
本页面介绍了 Cron 的工作原理,Cron 是类 Unix 操作系统上的作业调度器。Cron 最适合用于调度重复性任务。调度一次性任务可以使用相关的 at 工具完成。Cron 有许多不同的实现,但 Alpine Linux 内置了 BusyBox 版本的 cron。Alpine Linux 中提供的其他软件包包括 cronie、fcron 和 dcron。
对于非持续运行的系统(如笔记本电脑或普通台式计算机),如果系统在 cron 作业的预定时间处于挂起或关机状态,则调用间隔较长的 cron 作业可能根本不会执行。为了解决这个问题,许多 crond
实现提供了特殊的指令,如 @daily
和 @monthly
,它们会跟踪上次执行时间,并且即使系统在作业应该运行时处于关闭状态,仍然会执行。
下面提供了如何在不同的 crond
实现中实现此目的的示例。
crond
已停止并从 OpenRC 中移除,如下所示:# rc-service crond stop # rc-update del crond
Cronie
cronie 软件包附带 anacron
工具,它可以进行这种异步作业处理。要使用它,首先安装 cronie 软件包,并配置它在启动时使用 OpenRC 启动。
Anacron
以下是在 Alpine Linux 中使用 anacron
的步骤
- 将行
@reboot /usr/sbin/anacron -s
添加到 root 用户的 crontab 中# crontab -e
- 编辑完成后,当使用命令
# crontab -l
查看或直接查看时,root crontab 应如下所示/var/spool/cron/crontabs/root 的内容
# do daily/weekly/monthly maintenance # min hour day month weekday command */15 * * * * run-parts /etc/periodic/15min 0 * * * * run-parts /etc/periodic/hourly 0 2 * * * run-parts /etc/periodic/daily 0 3 * * 6 run-parts /etc/periodic/weekly 0 5 1 * * run-parts /etc/periodic/monthly @reboot /usr/sbin/anacron -s
- Anacron 需要 /var/spool/anacron 文件夹以避免错误 cron.err anacron[2893]: Can't chdir to /var/spool/anacron: No such file or directory。因此,使用以下命令创建文件夹
# mkdir /var/spool/anacron
- 编辑配置文件 /etc/anacrontab 并通过
anacron -T
测试配置的有效性。 - 重启计算机以测试 anacron 的工作情况。syslog 文件 /var/log/messages 捕获来自 anacron 的消息,可以使用
cat /var/log/messages |grep anacron
进行搜索。
dcron
另一个可用的 crond,它完全集成了 anacron
的功能,是 dcron,即 “dillon 的轻量级 cron 守护进程”。要使用它,首先安装 dcron 软件包
# apk add dcron
最后,启动 dcron 并告诉 OpenRC 在启动时启动它
# rc-service dcron start # rc-update add dcron
配置
您可以使用 crontab -e
命令将指令添加到 crontab 中,包括 @hourly
、@daily
、@weekly
、@monthly
和 @yearly
指令。
这些特殊指令的语法与 anacron 略有不同。以下是如何调整 Alpine 的默认设置以使用带有特殊指令的 dcron 语法,以确保即使在非持续运行的系统上也能执行它们
/var/spool/cron/crontabs/root 的内容
正如您所看到的,作业的名称或 “ID” 以 shell 变量赋值的风格设置。有关 dcron 的选项及其 crontab
格式的更多信息,请查看 crontab(1)
和 crond(8)
手册页,您可以使用 dcron-doc 软件包安装它们。