Как предотвратить перезапуск службы Linux (Ubuntu 16.04.5 LTS) при использовании циклов, работающих в фоновом режиме? - PullRequest
0 голосов
/ 04 ноября 2019

Итак, у меня есть настройка скрипта, которую я хочу запустить как сервис. Сценарий непрерывно выполняет 8 команд curl:

#!/bin/bash
threads=8
check_interval=15
batch_url=https://myurl.com

for ((i = 0 ; i < threads ; i++)); do
  sleep $i
  while true; do
    sleep 0.5
    has_items=$(curl --silent -m 15.0 --connect-timeout 1.5 $batch_url/$i)
    if [ "$has_items" == "false" ]; then
      sleep ${check_interval}
      continue
    fi
  done &
done

У меня есть служебный файл настройки в systemd, который выглядит следующим образом:

[Unit]
Description=Run the batch forever
After=network.target

[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/bin/bash /usr/bin/my_script_location

[Install]
WantedBy=multi-user.target

Если я просто запускаю сценарий, он работает нормально,Он зацикливается на URL-адреса от /0 до /7 навсегда.

Однако, если я настрою его как службу, через некоторое время служба будет перезапущена.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...