封面来源:https://cache.yisu.com/upload/information/20220118/481/171650.jpg
在 crontab 的配置目录中设定计划任务
正如前面一篇文章里面提到的,设置 crontab 最简单的做法是直接使用 crontab -e 命令。其实 Linux 中为我们提供了另一种方式,就是将需要执行的自定义 crontab 文件放入下面的目录内(除了 crontab 和 cron.deny):

其中,crontab 是它默认的配置文件,在软件更新时会被覆写;cron.d 允许我们放入自定义的 crontab 文件;其余文件夹或文件内,不同的后缀表示不同的执行时间(hourly - 每小时,daily - 每日,weekly - 每周,monthly - 每月;deny 不讲,它用于记录禁止使用 crontab 的用户,这里用不到)。
特别地,在象征着不同时间执行的文件夹(如 cron.daily)内,不需要使用 crontab 文件,而是直接使用 .sh 脚本。这大大降低了 crontab 的学习门槛与复杂性。
使用 Anacron 运行周期性命令
Anacron(不是 Anaconda)用于保证计划任务始终运行,即使系统关机或休眠。如果因为系统关机或重启导致某个刚好卡在那个时间点/时间段上的计划任务没有执行时,那么在系统就绪后,Anacron 会按照给定的延迟执行计划任务(如果不指定,则不会有延迟执行的情况)。
下面是 Anacron 的一个实例:

重点是在下面的列表。每一个字段的含义如下:
上面的 START_HOURS_RANGE 变量会指定计划任务应该运行的时间段。比如说,在上面的图片里,下面列出的所有计划任务必须在 [3, 22] 这个时间段内运行,如果超过了,那只能第二天这个时间段继续了。
systemd 定时
这个功能必须安装 sysstat 软件包(可能需要重启系统):
# Debian/Ubuntu
sudo apt install sysstat
# Fedora/RHEL
sudo dnf install sysstat
# Arch Linux
sudo pacman -S sysstat这个软件包提供一个名为 sysstat-collect.timer 服务的 systemd 定时器单元,可以做到每隔一段时间收集一次系统统计信息。例如,在它的配置文件 /usr/lib/systemd/system/sysstat-collect.timer 中:

OnCalendar=*:00/10 表示每隔 10 分钟激活该定时器单元(也就是 sysstat-collect.service)。也可以使用一些更加复杂的例子: OnCalendar=2026-2-10 09,14,18,22:30:00,指的是在 2026 年的 2 月 10 日的 9 点、14 点、18 点和 22 点 30 分激活对应的服务单元。相对地,如果觉得每隔多长时间触发的写法很难懂,可以试一试 OnUnitActiveSec=min 选项,它的作用和 OnCalendar=*:00/min 是相同的。
请注意:
请不要随便修改
/usr/lib/systemd/system/目录内的任何配置文件,因为在更新时systemd会覆盖所有该目录下的配置更改。建议的做法是将需要修改的配置文件复制到/etc/systemd/system目录下,再修改复制后的文件。systemd在解析配置文件时遵循覆盖原则,如果两个目录下出现了同名文件,则会优先解析/etc/systemd/system目录下的文件。修改配置文件后,请使用
systemctl deamon-reload命令重启守护进程,再使用systemctl enable --now <unitname>.timer命令激活定时器单元。