Il job è inserito nella crontab in questo modo:
0 4 * * * sincronizza_dati.sh
il che indica che ogni mattina alle ore 4 verrà eseguito lo script sincronizza_dati.sh. Vorrei però eseguire questo script solamente se il servizio httpd è attivo.
Il mio script sincronizza_dati.sh potrebbe incominciare in questo modo:
#!/usr/bin/bash if [ `service httpd status | awk ' { print $3 } '` = "stopped" ] then echo "Servizio disattivato! Usciamo!" exit fi echo "Servizio attivato! Procediamo con la sincronizzazione"
e spesso questa è la soluzione migliore (specie se la sincronia per andare a buon fine richiede per davvero che il servizio httpd sia attivo).
Ma se non è questo il caso allora meglio mettere la condizione nel crontab: in questo modo diventa anche più chiaro capire in quali condizioni lo script viene eseguito.
L'unico problema è trovare la sintassi giusta per farci stare tutto il comando su di una sola riga. Ad esempio si può scrivere il comando così:
0 4 * * * if [ `service httpd status | awk ' { print $5 } '` = "running..." ]; then sincronizza_dati.sh; fi
Magari con l'aiuto di qualche script in perl si può avere una soluzione più pulita (non è bello avere una schifezza di awk sulla tabella crontab) ma... di quello ne parleremo nel prossimo disco!