Se start-stop-daemon è disponibile sulla vostra macchina, vi consiglio vivamente di utilizzarlo per avviare il processo. start-stop-daemon gestirà l'avvio del processo come utente senza privilegi senza forking da sudo o su (recommended in the upstart cookbook) E ha anche il supporto integrato per la gestione dei file pid. Ad esempio:
/etc/init/app_name.conf
#!upstart
description "Redis Server"
env USER=redis
start on startup
stop on shutdown
respawn
exec start-stop-daemon --start --make-pidfile --pidfile /var/run/app_name.pid --chuid $USER --exec /usr/local/bin/redis-server /etc/redis/redis.conf >> /var/log/redis/redis.log 2>&1
In alternativa si potrebbe gestire manualmente il file pid utilizzando il post-start script
strofa per crearlo e post-stop script
strofa per eliminarlo. Ad esempio:
/etc/init/app_name.conf
#!upstart
description "Redis Server"
env USER=redis
start on startup
stop on shutdown
respawn
exec sudo -u $USER sh -c "/usr/local/bin/redis-server /etc/redis/redis.conf 2>&1 >> /var/log/redis/redis.log"
post-start script
PID=`status app_name | egrep -oi '([0-9]+)$' | head -n1`
echo $PID > /var/run/app_name.pid
end script
post-stop script
rm -f /var/run/app_name.pid
end script
Perché dovresti usare Monit quando hai già specificato 'respawn'? – auny
@auny La ragione per usare monit oltre a upstart/respawn è che respawn è consapevole solo se il processo è vivo o meno, ma non sa se l'applicazione è in cattivo stato o meno. D'altra parte Monit può interagire con l'applicazione in diversi modi, ad esempio colpendo un endpoint di stato http, per gestire gli scenari in cui il processo potrebbe essere in esecuzione ma l'app si trova in uno stato di malfunzionamento o guasto che indica che il processo deve essere riavviato. – Egg
Oggigiorno Redis ha la sua funzionalità pid (pidfile in redis.conf) - http://download.redis.io/redis-stable/redis.conf – Willem