Arka planın çıktısını yakalamak ve bir dosyaya kaydetmek çok zor değildir:
start-stop-daemon --start --background \
--pidfile $PIDFILE --make-pidfile \
--chuid $DAEMON_USER \
--startas $DAEMON --no-close \
-- $DAEMON_ARGS >> $LOGFILE 2>&1
Ancak bu çözüm yetersiz olabilir logrotate.
Syslog'a çıktı almak daha iyi olabilir. On Debian bu systemd hizmetlerin davranışını eşleşir. Yukarıdaki örneği yeniden yazmak için yapılan aşağıdaki doğrudan girişim yanlıştır çünkü arka plan programı durdurulduktan sonra ardında iki ebeveyn olmayan ("zombi") işlemi (günlükçü ve arka plan programı) bırakır, çünkü start-stop-daemonyalnızca alt öğelerini sonlandırır, ancak tüm soyundan gelenleri değil:
## Do not use this!
start-stop-daemon --start --background \
--pidfile $PIDFILE --make-pidfile \
--chuid $DAEMON_USER \
--startas /bin/sh \
-- -c """exec $DAEMON $DAEMON_ARGS | /usr/bin/logger --tag $NAME"""
Çalışmasını sağlamak için, çocuklarını alınınca sonlandıran bir paketleyiciye ihtiyacımız var SIGTERM.start-stop-daemon . Biraz var:
duende :
start-stop-daemon --start --background \
--pidfile $PIDFILE \
--startas /usr/sbin/duende \
-- --pid $PIDFILE --chroot=/ --uid 65534 --ident $NAME \
/bin/su --login $DAEMON_USER --shell /bin/sh --command """exec ${DAEMON} $DAEMON_ARGS"""
Not: uid=65534bir kullanıcıdırnobody .
Artıları : işe yarıyor ve nispeten kolay.
Eksileri : 4 işlem (süpervizör duende, bırakılan ayrıcalıklara sahip çatalı (logger) suve arka plan programının kendisi); zorunlu --chroot; Arka plan programı hemen sona ererse (örneğin geçersiz komut)status_of_proc -p $PIDFILE "$DAEMON" "$NAME" , başarıyla başlatıldığını bildirin.
arka plan programı :
start-stop-daemon --start --pidfile $PIDFILE \
--startas /usr/bin/daemon \
-- --noconfig --name $NAME --stderr=syslog.info --stdout=syslog.info \
-- /bin/su --login $DAEMON_USER --shell /bin/sh --command """exec $DAEMON $DAEMON_ARGS"""
Avantaj : 3 işlemleri (danışman daemon, suve kendisi programı).
Eksileri : Arka plan programının komut satırı seçeneklerinin $PIDFILEkafa karıştırıcı olması nedeniyle yönetilmesi zordur ; Arka plan programı hemen sona ererse (örneğin geçersiz komut)status_of_proc -p $PIDFILE "$DAEMON" "$NAME" , başarıyla başlatıldığını bildirin.
start-stop-daemon --start --background \
--pidfile $PIDFILE --make-pidfile \
--chuid $DAEMON_USER \
--startas /usr/bin/pipexec -- -k \
-- [ D $DAEMON $DAEMON_ARGS ] [ L /usr/bin/logger --tag $NAME ] '{D:2>D:1}' '{D:1>L:0}'
Avantaj : 3 işlemleri (danışman pipexec, loggerve kendisi programı); Arka plan programı hemen sonlanırsa (örn. Geçersiz komut), status_of_proc -p $PIDFILE "$DAEMON" "$NAME"hatayı doğru şekilde bildirin.
Eksileri : yok.
Bu kazanan - iyi çalışıyor gibi görünen en kolay, temiz çözüm.
--startile değiştirerek daemon'u tekrar kapatmaktır--stop.