Перезапуск службы systemd при сбое зависимости

Да, вы не должны создавать какие-либо файлы в папке / sys . Это виртуальная файловая система, управляемая ядром. Его цель - предоставить информацию о системе и подключенных устройствах. Для этого не имеет смысла создавать файлы там пользователями.

26
09.07.2015, 00:47
2 ответа

Я потратил на это несколько дней, пытаясь заставить его работать "systemd", но разочаровался и написал сценарий-оболочку для управления зависимостями и сбоями. Каждая дочерняя служба - это обычная служба systemd, без «Requires», «PartOf» или каких-либо перехватчиков для других служб.

Мой служебный файл верхнего уровня выглядит так:

[Service]
Type=simple
Environment=REQUIRES=foo.service bar.service
ExecStartPre=/usr/bin/systemctl start $REQUIRES
ExecStart=@PREFIX@/bin/top-service.sh $REQUIRES
ExecStop=/usr/bin/systemctl      stop $REQUIRES

Пока все хорошо. Файл top.service управляет foo.service и bar.service . Запуск top запускает foo и bar , а остановка top останавливает foo и bar . Последним ингредиентом является мой сценарий top-service.sh , который отслеживает отказы служб:

#!/bin/bash

# This monitors REQUIRES services. If any service stops, all of the services are stopped and this script ends.

REQUIRES="$@"

if [ "$REQUIRES" == "" ]
then
  echo "ERROR: no services listed"
  exit 1
fi

echo "INFO: watching services: ${REQUIRES}"

end=0
while [[ $end == 0 ]]
do
  s=$(systemctl is-active ${REQUIRES} )
  if echo $s | egrep '^(active ?)+$' > /dev/null
  then
    # $s has embedded newlines, but echo $s seems to get rid of them, while echo "$s" keeps them.
    # echo INFO: All active, $s
    end=0
  else
    echo "WARN: ${REQUIRES}"
    echo WARN: $s
  fi

  if [[ $s == *"failed"* ]] || [[ $s == *"unknown"* ]]
  then
    echo "WARN: At least one service is failed or unknown, ending service"
    end=1
  else
    sleep 1
  fi
done

echo "INFO: done watching services, stopping: ${REQUIRES}"
systemctl stop ${REQUIRES}
echo "INFO: stopped: ${REQUIRES}"
exit 1
0
27.01.2020, 19:40

Не отвечаю на это. Но кому-то это может понадобиться (, потому что эта страница показывается в поиске):

должно быть

[Service]
 Restart=always
 RestartSec=3

https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/

-1
27.01.2020, 19:40

Теги

Похожие вопросы