Моя проблема:
Я пишу сценарий bash, и в нем я хотел бы проверить, работает ли данный сервис.
Я знаю, как сделать это вручную, с $ service [service_name] status
.
Но (особенно после перехода на systemd), который печатает целую кучу текста, который немного беспорядочно анализировать. Я предположил, что для скриптов с простым выводом сделана команда или возвращаемое значение, которое я могу проверить.
Но поиск в Google дает только массу результатов "О, просто ps aux | grep -v grep | grep [service_name]
". Это не может быть лучшей практикой, не так ли? Что если запущен другой экземпляр этой команды, но не запущенный сценарием инициализации SysV?
Или мне просто заткнуться и испачкать руки маленьким пгрепом?
источник
inactive
илиactivating
и обаsystemctl status
иsystemctl is-active
выходят с 3. (по состоянию на systemd-241 ) Обходной путь:systemctl show service | grep -qx ActiveStatus=activating
foo
что-то делает с системой, включая перезагрузку, и использует однократную службу, скажем,foo_cleanup
при следующей загрузке, чтобы очистить вещи. Я тестирую это (мой сценарий также запланирован как сервис) и хочу собирать ошибки впоследствии, но когда это позже (vsauce music)? Ну, один из критериев - это то, чтоfoo_cleanup
закончил («перестал быть активным»).systemctl
есть ли режим, подходящий для сценариев; используйтеshow
вместоstatus
, и добавьте параметры-p
/--properties
и--value
, чтобы получить только желаемый результат.Вот пример (из системы Ubuntu 17.04):
Бег (или иначе) это
SubState
. Если вы хотите узнать, активен ли сервис, используйте свойствоActiveState
Примечания от
man
:источник
--version
опцию с systemctl.В дополнение к ответу Zanna,
--value
опцияsystemctl show
была введена в версии 230 systemd . Так что он может быть недоступен в некоторых дистрибутивах, таких как Debian Jessie.В этом случае можно эмулировать опцию, используя sed:
источник
Я считаю это полезным для выполнения командной строки или если вы делаете сценарии.
Скопировано из @StephenKitt
Это проверит, не работает ли служба, и выполнит перезапуск службы.
the
||
there проверяет, является ли возвращаемое значение из systemctl ненулевым значением, если оно не активно, как объяснил автор.источник
Я слишком поздно , чтобы партии, однако использование systemctl является активными вместе с
&&
и||
к этому в сценарии обыкновение быть дело все время. Ниже приведен пример, который я использовал для tomcat, но могу использовать его в методе, принимающем аргументы и передавая имя сервиса в качестве аргументов, если вам нужно проверить несколько сервисов, но это выходит за рамки данной области.Вот как я использовал .... Просто делюсь своим.
и для простоты и легких вещей следуйте за другими, объясненными здесь:
источник
if systemctl is-active --quiet tomcat.service
? Кроме того,[[
это не стандартная оболочка.&&
и||
.Вместо использования команды sed, как в ответе Oxmel, достаточно использовать
cut -d'=' -f 2
для всех запрашиваемых свойств:например:
источник
Только что нашли этот отличный маленький сценарий:
Источник
источник