Piccolo consiglio del giorno: A volte è necessario eseguire un programma tramite riga di cron o comando, ma l’importante è che il programma non deve partire se un altra istanza dello stesso è già attiva.
O forse avete un processo che ogni X minuti o ore va in crash e quindi avete bisogno di un wrapper che controlli se è presente tra i processi attivi ed in caso non lo sia lo riavvii.
Il modo più veloce per raggiungere questo obiettivo che ho trovato è:
if [ -z "$(pgrep foo)" ] then # foo is not running else # foo is running fi |
pgrep cerca nei processi attualmente in esecuzione ed elenca gli ID dei processi che corrispondono ai criteri di selezione sullo stdout. La cosa bella è che pgrep può prendere un sacco di opzioni, per esempio
-u Cerca solo i processi il cui effettivo ID utente è elencato. Può essere utilizzato sia il valore numerico che l’uid.
-f La stringa data è di solito solo confrontata con il nome del processo. Quando -f è impostato, l’intera linea di comando è utilizzata.
Quindi per esempio potete usare:
#!/bin/bash if [ -z "$(pgrep -u mysql -f -- -port=3316 )" ] then /etc/init.d/mysqld start else echo "Process already running" >> /tmp/mysql.log fi |
Per verificare che mysql stia andando, ed in caso contrario dare uno start.
Popular Posts:
- None Found
Sto cercando proprio un script del genere….ma su debian non mi funziona.
Devo controllare se un programma è in esecuzione e se non lo è deve lanciare la riga di comando per riavviarlo…help