Cron para executar o comando uma vez por dia, sem saber a que horas

2

Eu quero executar um comando cron apenas uma vez por dia, mas não em um horário específico, pois as horas em que o computador está ligado são imprevisíveis.

Posso fazer isso?

    
por Ricardo 03.07.2013 / 22:35

2 respostas

3

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.

    
por 03.07.2013 / 22:40
3

anacron faz isso. Basta definir o horário desejado e, se o computador estiver desligado durante esse período, ele será iniciado assim que o computador ligar novamente.

    
por 03.07.2013 / 22:40

Tags