Eu costumo apenas quebrar todos os comandos de longa duração em uma tela e obter cron
para iniciar a tela apenas se não houver um já em execução.
Portanto, a linha a seguir em crontab
*/2 * * * * /bin/bash /path/to/LongRunningScript.bash
... se transforma em algo assim:
*/2 * * * * /usr/bin/screen -S MyUniqueName -Q select . || /usr/bin/screen -dmS MyUniqueName /bin/bash /path/to/LongRunningScript.bash
Eu gosto disso porque também dá a você a chance de se conectar a um script em execução e verificar sua saída / status.
Em seu cenário, você pode obter cron
para verificar outra tela antes de executar uma compilação, por exemplo
0 3 * * * /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS AutomatedBuild /bin/bash /path/to/BuildScripts.bash
10 3 * * * /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS OtherAutomatedBuild /bin/bash /path/to/OtherBuildScripts.bash
Quando você executa uma compilação manual, apenas entre em screen
antes de executar o script (por favor, comente se você precisa de dicas sobre como conectar / desconectar de screen
. É um utilitário útil - dê uma olhada se você ainda não começou a usá-lo)
Digite screen -S ManualBuild
, clique em [enter]
e execute os comandos que você deseja executar.
Nota: Se você usar o exemplo como fornecido, poderá confundir cron
se tiver mais de uma sessão de tela com o nome "ManualBuild" em execução.