我目前正在使用 Ubuntu 20.04。我的疑问与 anacron 命令选项-n
和有关-f
。
该命令是否anacron -n
运行 anacron 中安排的所有作业(每日、每周和每月)还是仅运行安排在今天运行的作业?我得到了该命令的以下输出sudo anacron -n -d
:
Anacron 2.3 started on 2023-04-01
Normal exit (0 jobs run)
我得到了该命令的以下输出sudo anacron -f -d
:
Anacron 2.3 started on 2023-04-01
Will run job `cron.daily' in 5 min.
Will run job `cron.weekly' in 10 min.
Will run job `cron.monthly' in 15 min.
此外,当我结合-n
和-f
选项时,所有作业都开始运行,而无需考虑延迟。
有人知道使用 anacron 命令时这两个选项究竟有何不同吗?
答案1
一般来说,anacron 的工作方式是,它只执行在给定“时间跨度”内尚未执行的作业(每小时,日常的,每周和每月)。
因此,如果你在一周内第一次运行 anacron,它将运行计划的任务每小时,日常的和每周。如果您在之后立即运行它,则不会运行任何任务。如果您在一小时后运行它,则只有计划于每小时将运行等等
为了跟踪这一点,anacron 会为每次运行的作业保存一个时间戳。只有当计划的“时间跨度”超过时间戳时,作业才会再次运行。
现在-n
和-f
选项在anacron 手册页,它们做了两件截然不同的事情。
该
-f
选项强制(重新)运行所有作业,忽略时间戳。这意味着如果你使用该选项连续多次运行 anacron-f
,它将重新运行全部作业 - 包括那些计划只运行的作业日常的,每周和每月。该
-n
选项告诉 anacron 立即运行相关作业,考虑时间戳,但忽略设置的延迟/etc/anacrontab
。默认延迟(从您的输出中可以看出):cron.daily
- 5分钟cron.weekly
- 10分钟cron.monthly
- 15分钟
此外,该
-n
选项还包括-s
选项,以便作业按顺序(一个接一个)运行,而不是并行运行每个“时间跨度”的作业。
我认为用表格来概括是最清楚的:
选项 | 强制使用时间戳 | 强制延迟 | 串行执行 |
---|---|---|---|
没有任何 | 是的 | 是的 | 不 |
-s |
是的 | 是的 | 是的 |
-n |
是的 | 不 | 是的 |
-f |
不 | 是的 | 不 |
-fs |
不 | 是的 | 是的 |
-fn |
不 | 不 | 是的 |