Embora eu não saiba exatamente por que isso está acontecendo, parece que trabalhos de longa duração dentro do cron causam um comportamento estranho. Na postagem original, há uma série de trabalhos que são disparados a cada cinco minutos e outros um minuto após o outro. Se o primeiro trabalho demorar muito (10 minutos, por exemplo), meu palpite é que o processo bifurcado do primeiro trabalho fica pendurado por dez minutos e aciona os trabalhos subseqüentes na lista. Mas o processo principal do cron também está disparando esses trabalhos corretamente, de modo que as duplicatas ocorrem e todo o problema ocorre em cascata.
Chega de adivinhação. Para corrigir, aqui está um trecho do meu novo crontab, usando flock
para bloquear trabalhos subseqüentes que poderiam ser executados em cascata incorretamente.
# every 5 minutes
*/5 * * * * flock -w 2000 /tmp/cnsd.lockfile.pdm -c "/usr/bin/longrunningjob1"
# every 5 minutes
*/5 * * * * flock -w 2000 /tmp/cnsd.lockfile.pdm -c "/usr/bin/longrunningjob2"
# every 15 minutes past the hour
15 * * * * flock -w 2000 /tmp/cnsd.lockfile.pdm -c "/usr/bin/longrunningjob3"
Pelo menos dessa forma, quando o sistema está sobrecarregado, ele não causa uma série de tarefas que nunca deveriam ter sido disparadas, dando a chance a tudo se recuperar. Eu joguei com diferentes classes de tarefas usando arquivos de bloqueio diferentes, mas no meu caso eu só tinha recursos limitados, então enfileirar um atrás do outro era a melhor maneira de manter o sistema rodando.