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