데몬의 출력을 캡처하여 파일에 저장하는 것은 그리 어렵지 않습니다.
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
실제로 작동합니다.