Cron 每天运行一次命令,无论什么时间

Cron 每天运行一次命令,无论什么时间

我只想每天运行一次 cron 命令,但不是在特定时间运行,因为我的计算机开启时间是不可预测的。

我可以做吗?

答案1

根据您的cron实施,您可能能够使用@daily。从man cron

Instead of the first five fields, one of eight special strings may
 appear:

       string          meaning
       ------          -------
       @reboot         Run once, at startup.
       @yearly         Run once a year, "0 0 1 1 *".
       @annually       (same as @yearly)
       @monthly        Run once a month, "0 0 1 * *".
       @weekly         Run once a week, "0 0 * * 0".
       @daily          Run once a day, "0 0 * * *".
       @midnight       (same as @daily)
       @hourly         Run once an hour, "0 * * * *".

我不确定如果您的计算机在午夜关闭cron,它会如何处理@daily。也许它会在下次打开时运行该作业,但我对此表示怀疑。显然, anacron可以做到这一点,但我从未使用过它。另一种解决方案是让您的作业每次运行时创建一个文件,然后编写一个脚本来检查文件的修改日期,如果修改日期超过一天,则再次运行该作业。例如:

#!/usr/bin/env bash

## The command you want to run, change this to whatever
## command you actually want.
COMMAND='echo foo';

## Define the log file
LOGFILE=$HOME/.last_run;

## If the log file doesn't exist, run your command
if [ ! -f $LOGFILE ]; then
    ## If the command succeeds, update the log file
    $COMMAND && touch $LOGFILE
else
    ## If the file does exist, check its age
    AGE=$(stat -c "%Y" $LOGFILE);
    ## Get the current time
    DATE=$(date +%s);
    ## If the file is more than 24h old, run the command again
    if [[ $((DATE - AGE)) -gt 86400 ]]; then
      $COMMAND && touch $LOGFILE;
    fi
fi

如果您创建每小时运行一次脚本的 crontab(@hourly),它将在自上次运行以来每 24 小时运行一次您的命令。

答案2

anacron可以做到这一点。只需设置所需的时间,如果您的计算机恰好在这段时间内关闭,它将在计算机重新打开时立即启动。

相关内容