Controllare se un servizio è in esecuzione

Script che controlla se un determinato servizio (in questo caso apache) è in esecuzione e se non lo è lo riavvia.

#!/bin/bash

if $(ps ax | grep apache2 | grep -v grep > /dev/null ) ;
then
exit ;
else
/etc/init.d/apache2 restart ;
fi
Un altro modo per fare la stessa cosa:

#!/bin/bash

TAG=”MOTION”

CONTROL=$(ps ax | grep motion | grep -v grep | awk ‘{print $5}’)

sleep 5 ;

if [ -n “$CONTROL” ]
then
echo “Motion già in esecuzione” ;
exit 0 ;
else
echo “Motion non attivo, RIAVVIO motion!”
motion ;
logger riavvio servizio non attivo -t $TAG ;
exit 1 ;
fi


Questo script prende l’output opportunamente filtrato da grep e se la stringa NON è vuota (-n “$CONTROL”) esce perché motion è già in esecuzione, altrimenti riavvia il servizio e riporta con logger un eventuale avvio.

ATTENZIONE: il nome dello script non deve contenere “traccia” del nome del servizio da cercare, grep altrimenti troverà come servizio corrispondente lo stesso script e non funzionerà come ci si aspetterebbe: in questo caso ad esempio sarebbe un errore nominarlo “riavvio_motion”.