У меня много демонов крутится на PHP и между собой они общаются обычно через RabbitMQ (один другому задания шлет), запуск демона происходит вот так
#!/bin/bash
s_path="/bot1/sms/"
PIDFILE=$s_path"daemon.pid"
RUN="setsid /bin/php /bot1/sms/daemon.php -a -b -c 10"
LOG=$s_path"log.txt"
SERVICE_NAME="MY DAEMON PHP"
s_start() {
test -f $PIDFILE && echo "$SERVICE_NAME is started" && exit
echo -n "Starting $SERVICE_NAME: "
`$RUN > $LOG & echo $! > $PIDFILE & disown -a` && echo 'ok' || echo 'error'
}
s_stop() {
test -f $PIDFILE || echo "$SERVICE_NAME isn't started"
test -f $PIDFILE || exit
echo -n "Stopping $SERVICE_NAME: "
kill -9 $(cat $PIDFILE) && echo 'ok' || echo 'error'
rm $PIDFILE
}
case $@ in
start)
s_start
;;
stop)
s_stop
;;
restart)
s_stop
s_start
;;
*)
echo "Use start|stop|restart"
;;
esac
В скрипте прописан путь до папки с демоном, туда при старте записывается pid процесса, по этому pid процесс убивается, конечно это такое решение для скрипта, как молотком по голове, ну ничего критичного не делается обычно, если убит скрипт и не успел что-то доделать, то при следующем старте доделает...
Весь выхлоп скрипта в лог закидывается, но можно и в /dev/null отправить.