![Cron 每天运行一次命令,无论什么时间](https://linux22.com/image/1369225/Cron%20%E6%AF%8F%E5%A4%A9%E8%BF%90%E8%A1%8C%E4%B8%80%E6%AC%A1%E5%91%BD%E4%BB%A4%EF%BC%8C%E6%97%A0%E8%AE%BA%E4%BB%80%E4%B9%88%E6%97%B6%E9%97%B4.png)
我只想每天运行一次 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
可以做到这一点。只需设置所需的时间,如果您的计算机恰好在这段时间内关闭,它将在计算机重新打开时立即启动。