이것은 내 SysVinit 파일의 일부입니다.
NAME="flask-daemon"
PIDFILE="/var/run/"$NAME".pid"
DAEMON="/home/ubuntu/flask/run.py"
DAEMON_USER=root
f_start() {
echo -e "\nStarting : $NAME"
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --exec $DAEMON
}
오류가 어디에 있는지 아는 사람이 있나요?
또한 무서운 점은 이 경우 한 프로세스의 PID만 pid 파일에 쓴다는 것입니다. 따라서 이렇게 하면 /etc/init.d/flask-daemon stop
파일을 쓰고 있는 것으로 생각되는 PID와 관련된 프로세스만 종료됩니다.
프로세스(왜 두 개인가요?):
ps aux | grep run.py
root 3591 3.0 1.7 132700 17460 ? S 19:27 0:00 /usr/bin/python /home/ubuntu/flask/run.py
root 3595 4.5 1.7 213144 18080 ? Sl 19:27 0:00 /usr/bin/python /home/ubuntu/flask/run.py
root 3602 0.0 0.0 10460 948 pts/0 S+ 19:27 0:00 grep --color=auto run.py
PID 파일:
$ cat /var/run/flask-daemon.pid
3591
하나의 프로세스만 종료되었습니다.
ps aux | grep run.py
root 3595 0.3 1.7 213144 18080 ? Sl 19:27 0:00 /usr/bin/python /home/ubuntu/flask/run.py
root 3613 0.0 0.0 10460 948 pts/0 S+ 19:27 0:00 grep --color=auto run.py
관찰: > 저도 사용해 보았 --startas
으나 두 개의 프로세스가 생성되었고 심지어 최악이었습니다. /var/run/flask-daemon.py
데몬 프로세스의 프로세스를 제외한 다른 프로세스의 PID를 기록합니다.
답변1
데몬이 데몬 모드에서 실행 중이므로 시작 시 자체 복사본을 생성합니다.
나는 이것이 ps 출력의 STAT 열에 있는 "Sl"의 "l" 부분이 의미하는 것일 수 있다고 생각합니다.
저는 최근에 python-daemon을 많이 사용하고 있는데, 스크립트가 이를 사용하고 있다면 데몬 컨텍스트의 생성자에서 프로세스를 분리할지 여부를 알려줄 수 있습니다. 그렇게 하지 말라고 하면 금상첨화일 것입니다.
-또는-
start-stop-daemon을 사용하지 말고 detach_process 플래그를 사용하여 systemd 서비스를 생성하십시오.
-또는-
프로세스를 분리하려면 두 가지를 모두 수행하고 프로세스에 알리십시오.