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

1

Como o cron lidaria com um trabalho que executa vários comandos?

Por exemplo, eu 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. assim secondscript.sh depende de firestscript.sh completando.

  • A segunda razão é que esses scripts / comandos são caros para 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 dependências são um problema, existe uma maneira de dividir o trabalho em vários trabalhos e ainda satisfazer as dependências?
O cron tem uma facilidade assim?

nelaaro
fonte

Respostas:

2

Em relação ao seu primeiro ponto, nenhum dos seus crontabs garante a resolução apropriada da dependência, porque cada comando é executado 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 é 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 três perguntas, a resposta é sim, mas pode ser complicado. Você precisa 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 ajudá-lo lá.

m4573r
fonte
a manutenção é um bom ponto. É significativamente mais fácil mudar como um trabalho e depois como 6 ou 7 trabalhos.
nelaaro