Existem boas razões para que uma única tarefa do cron execute vários comandos [closed]

1

Como o cron manipula um trabalho que executa vários comandos.

Como exemplo, tenho um cron job que se parece com isso. Que fica muito difícil de ler.

10 0 * * * firstscript.sh > first.log; secondscript.sh >> second.log; thirdscript.sh >> third.log 2>&1;

Todos os três scripts são executados ao mesmo tempo. No meu ambiente, temos 6 comandos executados em sequência.

Por que não escrever os mesmos trabalhos em três trabalhos separados?

10 0 * * * firstscript.sh > first.log;  
10 0 * * * secondscript.sh >> second.log; 
10 0 * * * thirdscript.sh >> third.log 2>&1;

Eu herdei esses trabalhos e estou tentando entender melhor por que fazê-lo como vários comandos em vez de 3 trabalhos separados.

  • A primeira razão pela qual posso pensar que pode haver dependências entre os scripts. Então eles têm que executar nessa ordem específica. Portanto, secondscript.sh depende de firestscript.sh de conclusão.

  • A segunda razão é que esses scripts / comandos são caros de serem executados e o servidor funciona melhor quando são executados sequencialmente. Bloqueios de arquivos em potencial e vários comandos gravados no mesmo arquivo também podem causar problemas.

Se o primeiro script sair com erro, os comandos que o seguem são executados?
Se as dependências são um problema, existe uma maneira de dividir o trabalho em várias tarefas e ainda satisfazer as dependências?
O cron tem uma facilidade como essa?

    
por nelaaro 07.09.2012 / 14:15

1 resposta

2

Em relação ao seu primeiro ponto, nenhum dos seus crontabs garante a resolução apropriada da dependência, porque todos os comandos são executados independentemente do problema do anterior. Para fazer isso, você quer usar o operador && entre seus comandos. Isso também responde a primeira de suas últimas 3 perguntas.

Seu segundo ponto pode ser válido, dependendo do contexto. Embora eu suspeite que a razão para escrever todos os comandos em uma linha seja que é mais fácil adicionar algo no final do que adicionar uma nova linha com uma nova programação. Um motivo também pode ser a manutenção: se você quiser alterar sua programação para todos os seus comandos, é mais fácil alterar apenas uma linha.

Para a segunda das suas últimas 3 perguntas, a resposta é sim, mas pode ser complicado. É necessário identificar manualmente qual tarefa pode ser executada com segurança em simultâneo com outra e configurar um mecanismo para permitir que seu próximo conjunto de tarefas saiba se as primeiras foram bem-sucedidas ou não. Cron não tem nada embutido para te ajudar lá.

    
por 07.09.2012 / 14:34