Start-Stop-Daemon

無限循環程序的啟動-停止-守護程序塊

  • February 18, 2016

我的任務是從 bash 腳本中設計一個服務,以便以服務…啟動/停止/重新啟動的方式呼叫。

成為服務的腳本是一個無限的while循環,它每分鐘醒來並進行一些檢查。我這樣稱呼它:

start() {
echo -n $"Starting $DESC:"
DAEMON_ARGS=$(xmlstarlet sel -T -t -m "/config/input/sensor/device/resource" -v "concat(../../@type, ' ', ../../@dev, ' ', @res)" -n $CONFIGURATION_FILE | extract_devices)        # get device names out of XML file
echo "daemon args $DAEMON_ARGS"
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo}

pid 和 daemon 定義如下:

PIDFILE="/var/run/detection.pid"
NAME="jblub_control_loop.sh"
DAEMON="/root/test_det/${NAME}"

當我跑

./detection start(我也嘗試複製到 init.d 並在服務檢測啟動的情況下執行)

init 腳本根本不會跳出循環並在 start-stop-daemon 函式中保持阻塞。當我在 jblub_control_loop.sh 中註釋掉無限 while 循環時,它通過但沒有創建 pid 文件。

我的問題是如何正確啟動具有無限循環的腳本作為服務以及為什麼沒有創建我的 pid 文件。

作為一個開始,

使用 –background 開關,所以它是分叉的。使用 -m 開關創建一個 PID 文件

start-stop-daemon --start --background -m --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS

有關完整的答案,請參閱https://stackoverflow.com/questions/16139940/what-is-start-stop-daemon-in-linux-scripting

享受

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