具有无限循环的进程的启动-停止-守护进程块

具有无限循环的进程的启动-停止-守护进程块

我的任务是从 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

享受

相关内容