ไม่ยากเกินไปที่จะจับเอาท์พุทของ daemon และบันทึกลงในไฟล์:
start-stop-daemon --start --background \
--pidfile $PIDFILE --make-pidfile \
--chuid $DAEMON_USER \
--startas $DAEMON --no-close \
-- $DAEMON_ARGS >> $LOGFILE 2>&1
logrotate
แต่วิธีนี้อาจจะก่อให้เกิดผลลัพธ์สำหรับ
อาจจะดีกว่าถ้าจับเอาท์พุทไปที่ syslog ในDebianสิ่งนี้จะตรงกับพฤติกรรมของบริการ systemd ความพยายามที่ตรงไปตรงมาต่อไปนี้ในการเขียนตัวอย่างข้างต้นใหม่นั้นไม่ถูกต้องเนื่องจากทิ้งไว้เบื้องหลังสองกระบวนการพาเรนต์น้อย ("zombie") (คนตัดไม้และภูต) หลังจากหยุด daemon เนื่องจาก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
มีบางส่วน:
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"""
หมายเหตุ: เป็นผู้ใช้uid=65534
nobody
ข้อดี : ใช้งานได้และค่อนข้างง่าย
จุดด้อย : 4 กระบวนการ (หัวหน้างานduende
, ทางแยกที่มีสิทธิ์ลดลง (คนตัดไม้) su
และดีมอนเอง); บังคับ--chroot
; หาก daemon ยุติทันที (เช่นคำสั่งไม่ถูกต้อง) ให้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
เนื่องจากตัวเลือกบรรทัดคำสั่งของdaemon ที่สับสน หาก daemon ยุติทันที (เช่นคำสั่งไม่ถูกต้อง) ให้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
และภูตตัวเอง); ถ้า daemon ยุติทันที (เช่นคำสั่งไม่ถูกต้อง) status_of_proc -p $PIDFILE "$DAEMON" "$NAME"
รายงานความล้มเหลวอย่างถูกต้อง
จุดด้อย : ไม่มี
นี่คือผู้ชนะ - วิธีแก้ปัญหาที่ง่ายและเรียบร้อยซึ่งดูเหมือนว่าจะทำงานได้ดี
--start
ด้วยการ--stop
ใช้งานจริง