Feb 052011
 

tux
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:

Flattr this!

  One Response to “Verificare se un programma è in funzione con bash”

  1. 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

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*