Назад | Перейти на главную страницу

Пометить сбойный модуль systemd как активный вручную

Я хотел бы активировать однократную службу, даже если systemd помечает ее как сбойную. Как я могу это заархивировать?

Задний план:

Двухузловой кластер с DRBD. В те дни состояние DRBD управлялось простым скриптом, например:

# active.sh
drbdadm primary all
mount /dev/drbd0

# inactive:
umount /dev/drbd0
drbdadm secondary all

Теперь я преобразовал эту логику в одноразовый модуль systemd. Проблема в том, что на текущем первичном узле запуск этой службы не выполняется, потому что drbdadm возвращает код ошибки для устройства, уже находящегося в первичном состоянии.

Это желательно при нормальной работе, но не в первый раз. Я хотел бы сделать эту службу активной, поскольку она действительно активна. Systemd просто этого не знает (что совершенно нормально, мне просто нужен способ сказать ему, что он работает).

Есть миллион systemd варианты, так что вы можете найти вариант «игнорировать ошибку».

В противном случае простой способ - создать собственный сценарий запуска, аналогичный тому, который у вас был (active.sh). Затем укажите systemd в сценарий запуска.

Программа запуска может регистрировать любые ошибки и решать, какие [если есть] они должны распространяться до systemd через код выхода (т.е. последняя строка скрипта должна быть exit 0)

Другими словами, сценарий просто игнорирует drbdadm ошибка и продолжает mount.

Для наглядности последняя команда в скрипте (например, mount) может быть exec mount ...

Я считаю, что директива, которую вы здесь ищете, SuccessExitStatus. Вам нужно только узнать, какой код выхода возвращает drbdadm для уже основного диска, и добавить его в список.