start-stop-daemon이 예상대로 작동하지 않고 pid 파일이 기록되지 않았습니다.

start-stop-daemon이 예상대로 작동하지 않고 pid 파일이 기록되지 않았습니다.

Python 기반 프로그램(콘솔에서 자체적으로 분리되지 않음)을 제어하려고 합니다.

#!/bin/bash

user=nobody
pid=/var/run/xx.pid
name=xx
prog=/xx.py

case $1 in
    start)
        /sbin/start-stop-daemon --start -b --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" --chuid nobody -- --daemon
        ;;
    stop)
        /sbin/start-stop-daemon --stop --oknodo --user "$user" --name "$name" --pidfile "$pid" --retry=TERM/5/KILL/1
        ;;
    restart)
        ;;
    *)
        ;;
esac

시작 부분이 잘 작동합니다. 스크립트가 실행되고 있는 것을 볼 수 있지만 중지 부분은 그렇지 않습니다. 그것은 단순히 말한다No xx found running; none killed.

그럼 시작 부분에 뭔가 문제가 있는 것 같은데요?

답변1

start-stop-daemon --start --pidfile "$pid"--make-pidfile( )가 지정 되지 않으면 pid 파일에 쓰지 않습니다 -m. 그것이 없으면 --make-pidfile그것을 생성하기 위해 실행되는 프로그램에 달려 있습니다. 또한 --make-pidfile작동하기 위해 시작되는 프로세스는 포크를 통해 자체적으로 데몬화할 수 없으며 start-stop-daemon파일에 어떤 PID를 넣어야 하는지 알 수 없습니다.

--pidfile "$pid"사용 시나리오에서 수행되는 유일한 작업은 start-stop-daemon프로그램이 이미 실행 중인 경우 프로그램이 시작되지 않는다는 것입니다.


프로세스가 여전히 중지되지 않으면 전달된 모든 기준이 start-stop-daemon --stop일치해야 합니다. 즉 $pid, 실행 중인 프로세스여야 하고, 프로세스의 UID가 일치해야 하며 $user, 프로세스 이름(arg0)이 일치해야 합니다 $name.
다음을 수행하여 arg0의 값을 확인할 수 있습니다.ps h -p $pid -o comm

관련 정보