"start-stop-daemon"이 두 개의 프로세스를 생성하는 이유는 무엇입니까?

"start-stop-daemon"이 두 개의 프로세스를 생성하는 이유는 무엇입니까?

이것은 내 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 서비스를 생성하십시오.

-또는-

프로세스를 분리하려면 두 가지를 모두 수행하고 프로세스에 알리십시오.

관련 정보