Quando si schedulano dei job su cron è opportuno distanziarli tra di loro dal punto di vista temporale, in quanto la sovrapposizione degli stessi potrebbe portare a comportamenti inaspettati. Tale regola andrebbe seguita sempre e comunque, soprattutto se i job si occupano di parsare dei dati e di inserirli dentro un database.
Dopo questa breve premessa, ecco il codice che utilizzo per il suddetto scopo:
#!/bin/bash
ESEC=`ps aux | grep Parser | wc -l`
if [ $ESEC -gt 1 ]; then #la prima riga e' il grep stesso
echo "Parser is still running.";
exit 0;
fi
Lo script in questione è abbastanza semplice. Dapprima lancia un ps aux | grep Parser, dove Parser è il nome del processo di cui voglio controllare lo stato. Se tale processo non è in esecuzione, l'output del comando conterrà solo ed esclusivamente la riga relativa al grep. Dunque, se il numero di righe ricavate mediante un wc -l è strettamente maggiore di uno, vuol dire che una o più istanze del processo è in esecuzione (lo script esce). Viceversa, lo script continua in quanto nessuna istanza è attualmente attiva.
Alla prossima.