डेमॉन के आउटपुट को कैप्चर करना और उसे फ़ाइल में सहेजना बहुत मुश्किल नहीं है:
start-stop-daemon --start --background \
--pidfile $PIDFILE --make-pidfile \
--chuid $DAEMON_USER \
--startas $DAEMON --no-close \
-- $DAEMON_ARGS >> $LOGFILE 2>&1
हालाँकि यह समाधान के लिए उप-योग हो सकता है logrotate
।
यह बेहतर हो सकता है कि आउटपुट को syslog पर कब्जा कर लिया जाए। पर डेबियन इस systemd सेवाओं के व्यवहार से मेल खाएगा। उपरोक्त उदाहरण को फिर से लिखने का निम्नलिखित सीधा प्रयास गलत है क्योंकि यह दो माता-पिता ("ज़ोंबी") प्रक्रियाओं (लकड़हारा और डेमन) को पीछे छोड़ देता है क्योंकि डेमन को रोकना क्योंकि start-stop-daemon
केवल उसके बच्चे को समाप्त करता है, लेकिन सभी वंशज नहीं हैं:
## 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"""
इसे काम करने के लिए हमें एक रैपर की आवश्यकता होती है जो अपने बच्चों को प्राप्त करने SIGTERM
से समाप्त कर देता है start-stop-daemon
। कुछ हैं:
दोहे :
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"""
नोट: uid=65534
एक उपयोगकर्ता है nobody
।
पेशेवरों : यह काम करता है और यह अपेक्षाकृत आसान है।
विपक्ष : 4 प्रक्रियाएं (पर्यवेक्षक duende
, गिरा हुआ विशेषाधिकार (लकड़हारा), su
और डेमन के साथ इसका कांटा ); अनिवार्य --chroot
; यदि डेमन तुरंत समाप्त हो जाता है (जैसे अमान्य आदेश)status_of_proc -p $PIDFILE "$DAEMON" "$NAME"
इसे सफलतापूर्वक शुरू कर दिया गया है।
डेमॉन :
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"""
पेशेवरों : 3 प्रक्रियाएं (पर्यवेक्षक daemon
, su
और स्वयं डेमन)।
विपक्ष : डेमन के कमांड लाइन विकल्पों $PIDFILE
को भ्रमित करने के कारण प्रबंधन करना मुश्किल ; यदि डेमन तुरंत समाप्त हो जाता है (जैसे अमान्य आदेश)status_of_proc -p $PIDFILE "$DAEMON" "$NAME"
इसे सफलतापूर्वक शुरू कर दिया गया है।
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}'
पेशेवरों : 3 प्रक्रियाएं (पर्यवेक्षक pipexec
, logger
और डेमन खुद); यदि डेमन तुरंत समाप्त हो जाता है (जैसे अमान्य आदेश) status_of_proc -p $PIDFILE "$DAEMON" "$NAME"
सही ढंग से विफलता की रिपोर्ट करता है।
विपक्ष : कोई नहीं।
यह विजेता है - सबसे आसान, साफ समाधान जो अच्छी तरह से काम करता है।
--start
के साथ--stop
वास्तव में काम करता है।