Tidak terlalu sulit untuk menangkap keluaran daemon dan menyimpannya ke file:
start-stop-daemon --start --background \
--pidfile $PIDFILE --make-pidfile \
--chuid $DAEMON_USER \
--startas $DAEMON --no-close \
-- $DAEMON_ARGS >> $LOGFILE 2>&1
Namun solusi ini mungkin kurang optimal logrotate.
Mungkin lebih baik untuk menangkap keluaran ke syslog. Di Debian, ini akan cocok dengan perilaku layanan systemd. Upaya langsung berikut untuk menulis ulang contoh di atas salah karena meninggalkan dua proses tanpa induk ("zombie") (pencatat dan daemon) setelah menghentikan daemon karena start-stop-daemonhanya menghentikan anaknya tetapi tidak semua turunannya:
## 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"""
Untuk membuatnya bekerja kita membutuhkan pembungkus yang menghentikan anak-anaknya setelah menerima SIGTERMdari start-stop-daemon. Ada beberapa:
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"""
Catatan: uid=65534adalah pengguna nobody.
Kelebihan : ini bekerja dan relatif mudah.
Kekurangan : 4 proses (supervisor duende, forknya dengan hak istimewa yang dijatuhkan (logger), sudan daemon itu sendiri); wajib --chroot; Jika daemon langsung berhenti (mis. Perintah tidak valid) status_of_proc -p $PIDFILE "$DAEMON" "$NAME"laporkan sebagai berhasil dimulai.
daemon :
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"""
Kelebihan : 3 proses (supervisor daemon, sudan daemon itu sendiri).
Kekurangan : Sulit untuk dikelola $PIDFILEkarena opsi baris perintah daemon yang membingungkan ; Jika daemon langsung berhenti (mis. Perintah tidak valid) status_of_proc -p $PIDFILE "$DAEMON" "$NAME"laporkan sebagai berhasil dimulai.
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}'
Kelebihan : 3 proses (supervisor pipexec, loggerdan daemon itu sendiri); Jika daemon langsung berhenti (mis. Perintah tidak valid) status_of_proc -p $PIDFILE "$DAEMON" "$NAME"laporkan kegagalan dengan benar.
Kekurangan : tidak ada.
Inilah pemenangnya - solusi termudah dan rapi yang tampaknya berfungsi dengan baik.
--startdengan--stopbenar - benar berfungsi.