Como executo um programa apenas uma vez por dia, enquanto contabilizo o tempo de atividade da variável e a possível falha do programa?

2

Eu preciso executar um comando uma vez, mas apenas uma vez por dia, até que seja bem-sucedido.

O tempo de atividade contínuo não pode ser esperado, e o sucesso do programa não pode ser garantido.

Este programa requer acesso à rede, mas não toda vez que eu inicio meu computador com acesso à rede.

Meu programa será encerrado com, por exemplo, -1, a menos que seja bem-sucedido (o que retorna 0).

    
por daisy 14.06.2012 / 15:30

2 respostas

2

Use um shell para fornecer isso. Por exemplo, crie um script com algo como o seguinte:

#!/bin/sh
# Check to see if this is already running from some other day
mkdir /tmp/lock || exit 1
while ! command-to-execute-until-succeed; do
    # Wait 30 seconds between successive runs of the command
    sleep 30
done
rmdir /tmp/lock

Depois disso, aponte o cron para o script.

    
por 14.06.2012 / 15:46
1

Acho que a maneira mais fácil de fazer isso seria o seu programa verificar a existência de um arquivo antes de fazer a tentativa e criar esse arquivo assim que ele for executado com êxito.

Se você não puder modificar o programa para fazer isso, use o próprio cronjob. Algo ao longo das linhas de:

test -e /path/to/tempfile || ( /path/to/program && touch -a /path/to/tempfile )

Devido à maneira como o unix avalia as verificações de condição, uma vez que o lado esquerdo da condição || é avaliado como true , a expressão inteira é verdadeira e o lado direito nunca é avaliado - ou seja, o programa não é chamado .

Em seguida, dentro dos parênteses, & & exige que ambos os lados sejam avaliados como verdadeiros, portanto, se /path/to/program sair com um código de retorno diferente de zero, não há sentido em avaliar a instrução à direita - a expressão já é avaliada como falsa - e /path/to/tempfile nunca é criada. p>     

por 14.06.2012 / 15:46

Tags