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