Questi demoni...

4 risposte [Ultimo contenuto]
Ritratto di baydany
baydany
(Junior)
Offline
Junior
Iscritto: 15/02/2010
Messaggi: 9

Situazione: ho tomcat come application server  e ho queste esigenze: vorrei che fosse un demone/servizio e che sia monitorato.
Procedimento : per il monitoring ho usato monit che da inesperto non mi pare male. Per trattarlo come servizio mi sono fatto uno scrptino e poi piazzato con metodo classico sotto sia init.d e poi ho utilizzato update-rc.d per farlo partire allo startup.
Problema : non so per quale ragione quando faccio il kill di questo servizio il .pid file non viene cancellato, mentre se faccio un normale kill su qualsiasi altro demone il pid viene cancellato. La cancellazione del pid per me è importante perchè da quanto ho capito il watchdog monit va ad agire proprio sul file pid.
Qualche idea?
Un saluto a tutti

Questo è lo script che ho utilizzato per gestire tomcat come servizio
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="PUAG Service"
NAME="tomcat"
DAEMON_START=/usr/local/tomcat/bin/startup.sh
DAEMON_STOP=/usr/local/tomcat/bin/shutdown.sh
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/puagscript
#the user that will run the script
USER=puaguser

# NO NEED TO MODIFY THE LINES BELOW

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
startService()
{
        #se c'è il pid dico che il daemon is running altrimenti faccio partire lo startup.sh
        start-stop-daemon -b --start -p $PIDFILE --exec $DAEMON_START
        RETVAL="$?"
        return "$RETVAL"
}

#
# Function that stops the daemon/service
#
stopService()
{
        #se non c'è il pid dico che il daemon is not running altrimenti faccio partire lo shutdown.sh
        start-stop-daemon --stop -p $PIDFILE
        RETVAL="$?"
        rm -f $PIDFILE
        return "$RETVAL"
}

function main {
#   rc_reset
   case "$1" in
      start)                                               # starts the Java program as a Linux service
         startService
         ;;
      stop)                                                # stops the Java program service
         stopService
         ;;
      *)
         echo "Usage: $0 {start|stop}"
         exit 1
      esac
 }

main $1

Ritratto di mcortese
mcortese
(Guru)
Offline
Guru
Iscritto: 27/02/2009
Messaggi: 640

baydany ha scritto:

Problema : non so per quale ragione quando faccio il kill di questo servizio il .pid file non viene cancellato


Quando dici kill intendi proprio un kill -9 o piuttosto /etc/init.d/XXX stop? Nel primo caso, non vedo chi dovrebbe cancellare il file .pid, nel secondo dovrebbe funzionare.

Ritratto di baydany
baydany
(Junior)
Offline
Junior
Iscritto: 15/02/2010
Messaggi: 9

Ok, faccio un esempio :
prendo per esempio il server apache2 . quando faccio "kill  (numero pid di apache2)  " il servizio va giù e il pid del processo scompare dalla directory /var/run/ e ciò mi fa molto comodo perchè ho monit che se ne accorge e lo ritira su.
Quando ho invece ho un programmino scritto in java che viene avvianto(tramite la java virtual machine) di solito in questo modo : "java -jar foo.jar" il processo , controllando con ps -ax, ha il suo bel pid che riesco , tramite uno script wrapper , a riportarlo nella directory /var/run/qualcosa.pid . Quando faccio il kill il processo va giù ma il pid rimane nella cartellina e monit non si accorge che il processo è andato giù.
In modo differente invece si comprta supervise che non basandosi sul pid ma su una cartellina che gestisce lui riesce ad accorgersi e al kill ritirarlo su.
Un saluto

Ritratto di Lethalman
Lethalman
(Junior)
Offline
Junior
Iscritto: 15/04/2008
Messaggi: 39

E' il processo che si deve prendere carico di cancellare il pidfile.

Ritratto di mcortese
mcortese
(Guru)
Offline
Guru
Iscritto: 27/02/2009
Messaggi: 640

Non conosco monit, ma dalla descrizione del pacchetto mi sembra faccia talmente tante cose che mi sembra impossibile che si debba basare sul file PID...

monit supports: 
[...]
 * Process status and process timeout
 * Process cpu usage
 * Process memory usage
 * Process zombie check
 
Mi vuoi dire che non è in grado di controllare se un certo processo esiste ancora?