systemd: проверьте, что служба не запущена

Чтобы проверить в скрипте, что служба не работает, я попытался

systemctl is-active some.service 

который возвращает «неактивный» и выдает код 3, если служба не запущена или ее не существует.

Иногда, однако, он возвращает «неизвестный», а также код выхода 3, объяснение которого можно найти здесь: https://bugzilla.redhat.com/show_bug.cgi?id=1073481

Статус более сложная функция с созданием единицы в systemd-менеджере. Чем вы можете просмотреть его статус через-актив, пока сборщики мусора не съедят его.

Таким образом, в основном, вызывая что-то вроде systemctl status some.service и сборщик мусора, изменяют результат is-active , поэтому он не является надежным.

Рекомендация в том же обсуждении использовать

 systemctl show some.service -p ActiveState 

делает «обещание стабильности для этой команды».

Однако на одной системе я получаю Unit some.service could not be found. и код выхода 1 для службы, которая не существует в то время как в другой системе, я получаю ActiveState=inactive и код завершения 0.

Итак, как я могу проверить достоверность, если служба не запущена?

Если код выхода не равен 0 или ActiveState = неактивен, то это правда?

Поэтому сначала вы должны иметь точное имя службы, иногда имя службы – apache, а имя демона – httpd, поэтому, чтобы избежать этого, вы должны иметь точное имя службы, вы можете получить все службы:

 systemctl list-unit-files 

поэтому для улучшения поиска вы можете использовать grep :

 systemctl list-unit-files | grep "part_of_servicename_expected" 

пример состояния httpd с идентификатором ambigius с apache

 systemctl list-unit-files | grep -i "apache" 

после этого, если у вас есть результат, вы должны сделать:

 systemctl status servicename.service