如果我将某项任务添加到 cron 中作为每周任务,那么除非我的计算机在那个精确的时间打开,否则它不会运行吗?

如果我将某项任务添加到 cron 中作为每周任务,那么除非我的计算机在那个精确的时间打开,否则它不会运行吗?

假设我这样做:

0 0 0 * * somejob

这会在设定的日期运行吗?如果我的计算机在该日期没有运行,它会跳过该周吗?

假设我现在设置了这个任务。然后我的电脑会在 5 天后关机一整天。

基本上我需要每周运行一些程序,但我的电脑可能不会 24/7 全天候运行。

答案1

是的,cron如果计算机当时处于打开状态,则只会运行在特定时间安排的作业。它的工作方式是,每分钟检查所有计划的 cron 作业,看它们的时间字段是否与当前分钟匹配,如果匹配,则运行该作业。如果不匹配,则跳过该作业。没有“保存”作业执行以供以后执行的概念。

针对您的情况,您可以做的是使用标记文件来指示上次运行作业的时间。创建一个如下所示的小脚本或程序(这是伪 Bash 语法):

if (marker file was last modified > 1 week ago); then
    run the job
    touch marker file
fi

您可以将脚本设置为 cron 作业,每天、每小时甚至每分钟运行一次 - 确保它在您打开计算机的时间内每周至少运行一次。

答案2

阿纳克隆很可能是你正在寻找的:

Anacron 是一个周期性命令调度程序。它以天为单位的间隔执行命令。与 cron 不同,它不假设系统持续运行。

相关内容