Ubuntu
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.
所以我猜開始部分有問題?
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