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


17

파이썬 기반 프로그램을 제어하려고합니다 (콘솔에서 분리되지 않음)

#!/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.

시작 부분에 문제가 있다고 생각합니까?

답변:


22

start-stop-daemon --start --pidfile "$pid"--make-pidfile( -m)를 지정 하지 않으면 pid 파일에 쓰지 않습니다 . --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


pidfile이 작성되었습니다. 그러나 정지 부분이 여전히 작동하지 않음, 동일한 오류 메시지
데이지

@ warl0ck는 pid 파일이 정확하며 프로세스의 UID가 일치 $user합니까?
Patrick

예, 시작 - 중지 - 데몬 읽으려고 보았다 /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326이름이 있어야한다, 그래서 python대신 아마도?
데이지

완료, 이름을 대체 python하고 작동 ;-P
daisy

그렇습니다 $name. 일치해야합니다. 당신이 그것을 전달하고 있다는 것을 완전히 놓쳤다. 답을 업데이트 할 것이다.
Patrick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.