Dependendo da sua implementação de cron
, você poderá usar @daily
. De 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 * * * *".
Não sei como cron
lidará com @daily
se o seu computador estiver desligado à meia-noite. Talvez ele execute o trabalho da próxima vez que estiver ligado, mas duvido. Aparentemente, anacron
pode fazer isso, mas eu nunca usei. Outra solução seria fazer com que seu trabalho crie um arquivo toda vez que ele for executado e, em seguida, escreva um script que verifique a data de modificação do arquivo e execute o trabalho novamente se ele tiver mais de um dia. Por exemplo:
#!/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
Se você fizer um crontab que execute o script a cada hora ( @hourly
), ele executará seu comando sempre que 24 horas se passaram desde a última execução.