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

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

我的任務是從 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}"

當我跑步時

./檢測啟動(我還嘗試複製到 init.d 並與服務檢測啟動一起運行)

init 腳本根本不會跳出循環,並在啟動-停止-守護程序函數中保持阻塞狀態。當我在 jblub_control_loop.sh 中註解掉無限 while 循環時,它會通過,但不會建立 pid 檔案。

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

答案1

作為一個開始,

使用 --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

享受

相關內容