Eu li sobre as 2 maneiras a seguir de executar vários comandos em um único trabalho cron :
Podemos executar vários comandos no mesmo cron job, separando-os com um ponto e vírgula (;).
* * * * * /path/to/command-1; /path/to/command-2
Se os comandos em execução dependem um do outro, podemos usar o e comercial duplo (&&) entre eles. Como resultado, o segundo comando não será executado se o primeiro falhar.
* * * * * /path/to/command-1 && /path/to/command-2
Meus requisitos são:
- os comandos devem ser executados sequencialmente (aguarde a conclusão do atual antes de executar o próximo)
- os comandos devem ser executados na ordem dada
- mas todo comando deve ser executado, mesmo que o anterior tenha falhado
O que o link acima, portanto, não diz é:
A abordagem do ponto e vírgula ;
ainda garante que os comandos serão executados sequencialmente e na ordem especificada?
Sim, o uso
;
entre os comandos garantirá que todos os comandos sejam executados sequencialmente, um após o outro. A execução de um comando não dependeria do status de saída do anterior.Conforme apontado por Paul_Pedant nos comentários , fazer qualquer coisa mais complicada do que iniciar um único comando do crontab pode ser melhor feito coletando o trabalho em um script separado e, em vez disso, agendando esse script. Dessa forma, você pode testar e depurar seu script independentemente do cron, embora como o cron forneça um ambiente ligeiramente diferente do seu ambiente shell de login comum, ainda existem fatores ambientais (como qual é o diretório de trabalho atual e quais são os valores de
$PATH
e outros variáveis etc. são) para manter em mente.