Talvez seu arquivo crontab agora se pareça com:
# My cronjobs:
* 2 * * * /scripts/task1.sh
* 4 * * * /scripts/task2.sh
Você tem várias opções em vez de esperar que o agendamento de duas tarefas cron suficientemente distantes seja suficiente para que elas não se sobreponham quando uma é executada um pouco mais do que o esperado:
1. Basta agendar uma única tarefa cron que execute vários scripts sequencialmente:
# My cronjobs:
* 2 * * * /scripts/nightly-tasks.sh
e um script simples (que pode ser muito melhorado com um pouco mais de tratamento de erros e tal) já preservará a sequência e evitará que o segundo script seja iniciado quando o primeiro (ainda) não tiver sido concluído com êxito:
#!/bin/bash
# /scripts/nightly-tasks.sh
/scripts/task1.sh && /scripts/task2.sh
2. Mesclar os scripts em um único script, como você fez, é perfeitamente válido, mas, dependendo da complexidade desses scripts existentes, nem sempre é a melhor solução.
No seu exemplo, ele deve funcionar, embora você possa considerar mover a instrução begin
para torná-la uma única transação.
3. Use um arquivo de bloqueio para impedir que um trabalho cron inicie antes que outro tenha terminado com flock
, conforme descrito em este Q & A