«Правильный» способ проверить, запущена ли служба в сценарии

В файле кикстарта, который вы ищете:

ignoredisk --only-use=sda

Это приведет к тому, что каждый диск, кроме sda , будет проигнорирован установкой.


Буква sd должна оставаться прежней (поскольку она зависит от того, какой порт SATA используется). Однако стоит отметить, что съемный носитель может смещать буквы sd , если он используется до жесткого диска и обычно определяется как use sd * (например, если вы устанавливаем с флешки).

Если вы также не укажете разделы autopart или part в кикстарте, установка будет приостановлена ​​перед очисткой диска (чтобы спросить, как вы хотите разбить разделы. Любые другие запросы в вашем кикстарте / установке также предотвратит немедленную очистку диска). Здесь вы можете переключиться на TTY2 с помощью CTRL + ALT + F2 перед началом установки и попробовать смонтировать диск.

На TTY2 у вас будет бесплатный терминал root , так что вы можете создать каталог, смонтировать в него sda # и просмотреть все, чтобы убедиться, что это файлы.

После того, как вы можете вернуться к TTY1 и возобновить установку, если диск правильный.


Документация RHEL по кикстарту идеально подходит для подобных вещей.

109
07.10.2017, 16:24
8 ответов

В качестве дополнения к ответу Занны опция --valueдля systemctl showбыла введена в версии 230 systemd . Поэтому он может быть недоступен в некоторых дистрибутивах, таких как Debian Jessie.

В этом случае можно эмулировать опцию с помощью sed:

$ systemctl show -p ActiveState sshd | sed 's/ActiveState=//g'
active
$ systemctl show -p SubState sshd | sed 's/SubState=//g'  
running
22
27.01.2020, 19:29


Я слишком опоздал на вечеринку, однако использование systemctl -активно вместе с &&и ||для этого в сценарии не будет иметь место все время. Ниже приведен тот, который я использовал для tomcat, но я могу использовать его в методе, принимающем аргументы, и передавать имя службы в качестве аргументов, если вам нужно проверить несколько служб, но здесь это выходит за рамки.

STATUS="$(systemctl is-active tomcat.service)"
if [ "${STATUS}" = "active" ]; then
    echo "Execute your tasks....."
else 
    echo " Service not running.... so exiting "  
    exit 1  
fi

Вот как я использовал.... Просто поделился своим.

и для простоты и легкости следуйте другим объяснениям здесь:

systemctl -q is-active tomcat.service  && \
echo "Tomcat Runnung" || \
echo "Service is not running at all "
9
27.01.2020, 19:29

Только что нашел этот замечательный маленький скрипт:

#!/bin/bash
service=replace_me_with_a_valid_service

if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
  echo "$service is running!!!"
else
  /etc/init.d/$service start
fi

Источник

-2
27.01.2020, 19:29

Я нахожу это полезным для выполнения из командной строки или при создании скриптов.

Скопировано с @StephenKitt

Это проверит, не работает ли служба, и выполнит перезапуск службы.

systemctl is-active --quiet <service name> || <service name> restart

там ||проверяется, не является ли возвращаемое значение из systemctl -нулем, что означает, что оно не активно, как объяснил автор.

11
27.01.2020, 19:29

Вместо использования команды sed, как в ответе Oxmel, достаточно использовать cut -d'=' -f 2для всех запрашиваемых свойств:

например:

$ systemctl show -p ActiveState sshd | cut -d'=' -f2
active
$ systemctl show -p SubState sshd | cut -d'=' -f2
running
3
27.01.2020, 19:29

Также работает для не -systemd ОС.

А как насчет ps -C service-name? проверьте $?для ответа. Если 0, то работает, если 1, то не работает.

Пример:

ps -C privoxy && echo running

Тихая версия:

ps -C privoxy 1>/dev/null && echo running

Внимание:

Я заметил, что имена сервисов -длиннее 14 символов могут давать ложное срабатывание.

См. также комментарий Ника С.

Пример:

Правильно показывает работу:

$ ps -C notification-daemon
  PID TTY          TIME CMD
 7418 ?        00:00:04 notification-da

Неверно показывает работу:

$ ps -C notification-daemon-fake
  PID TTY          TIME CMD
 7418 ?        00:00:04 notification-da

Правильно показывает, что не работает, потому что меньше 14 символов:

$ ps -C notification
  PID TTY          TIME CMD

Я получил этот ответ от здесь .

0
13.02.2020, 12:35

это для системы init.d

если служба не запущена, запустить службу:

service mysql status > /dev/null ||     service mysql start &
service ssh status > /dev/null ||     service ssh start &
service php7.4-fpm status > /dev/null ||     service php7.4-fpm start &
service redis-server status > /dev/null ||     service redis-server start &
service nginx status > /dev/null ||     service nginx start  &
service cron status > /dev/null ||     service cron start &

когда программа завершается, она также возвращает идентификатор ошибки, байт со знаком. при выходе без проблем значение обычно 0. при выходе из-за ошибок значение обычно равно идентификатору ошибки или часто -1.

Это значение часто используется для интеграции команд, например числовой идентификатор состояния печатного вывода программы.

чтобы использовать его с цепочкой команд, есть две опции && и ||

|| проверяет, не является ли возвращаемое значение выхода нулем, затем запускает связанную команду

вместо || невозможно написать &&

&& проверяет, является ли возвращаемое значение нуля нулем, затем запускает цепочку команд

аналогично ответу @asterisk на этой странице (для systemd )https://unix.stackexchange.com/a/500336/156304

2
20.11.2020, 01:25

Абсолютно беспардонный плаг, так как я автор, но я бы порекомендовал проверить задание service::linuxиз модуля Puppet Service . Это чистый Bash, который поставляется в комплекте с Bolt, поэтому вам вообще не нужно использовать Puppet. например.

$ bolt task run service::linux action=status name=sshd --targets localhost

{
  "status": "MainPID=1358,LoadState=loaded,ActiveState=active",
  "enabled": "enabled"
}

В коде используется systemctl show, то есть здесь . Он используется достаточно долго, поэтому я могу с уверенностью рекомендовать его, и вопросы и PR приветствуются.

1
10.09.2021, 18:15

Теги

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