блоки start-stop-daemon для процесса с бесконечным циклом

блоки start-stop-daemon для процесса с бесконечным циклом

У меня есть задача разработать службу из скрипта 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 и запустить с service detection start)

Скрипт init просто не выходит из цикла и остается заблокированным в функции start-stop-daemon. Когда я закомментировал бесконечный цикл while внутри моего jblub_control_loop.sh, он проходит, но файл pid не создается.

Мой вопрос заключается в том, как правильно запустить скрипт с бесконечным циклом в качестве службы и почему мой pid-файл не создается.

решение1

Для начала,

используйте переключатель --background, чтобы создать ответвление. используйте переключатель -m, чтобы создать PID-файл

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

Для полного ответа см.https://stackoverflow.com/questions/16139940/что-такое-запуск-остановка-демона-в-linux-скриптинге

Наслаждаться

Связанный контент