Ubuntu

start-stop-daemon 沒有按預期工作,沒有寫入 pid 文件

  • November 8, 2016

我正在嘗試控制一個基於 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

引用自:https://unix.stackexchange.com/questions/137519