Вам не нужно ничего особенного, чтобы сделать демона, правда. Любая программа на любом языке может «демонизировать» себя. Кроме того, вы можете демонизировать существующую программу с помощью небольшой оболочки сценариев оболочки (например, программа запуска /etc/init.d может позаботиться об этом).
Как правило, демон имеет следующие свойства:
- рабочий каталог должен быть /
- STDIN должен быть / dev / null
- STDOUT и STDERR должны быть либо / dev / null, либо файлами журнала
- родительский идентификатор должен быть init (1), его легко получить, разветвив и затем оставив родительский выход.
Обновление 1
Monit в основном заботится о мрачных подробностях, которые я здесь изложил. Для получения подробной информации о STDIN / STDOUT, / dev / null и т. Д. Это базовые концепции Unix, поэтому я думаю, вам придется рано или поздно разобраться в этом. Посмотрите, например, это введение в Unix .
Обновление 2
Сценарий оболочки, который демонизирует программу, будет выглядеть следующим образом. Обратите внимание, что это не будет работать для программ, которые остаются на переднем плане.
#!/bin/sh DAEMON=/some/program/to/run PARAMETERS="parameters to my program" LOGFILE=/var/log/somefile.log start() { echo -n "starting up $DAEMON" RUN=`cd / && $DAEMON $PARAMETERS > $LOGFILE 2>&1` if [ "$?" -eq 0 ]; then echo "Done." else echo "FAILED." fi } stop() { killall $DAEMON } status() { killall -0 $DAEMON if [ "$?" -eq 0 ]; then echo "Running." else echo "Not Running." fi } case "$1" in start) start ;; restart) stop sleep 2 start ;; stop) stop ;; status) status ;; *) echo "usage : $0 start|restart|stop|status" ;; esac exit 0