Как попытаться запустить сервис, только если он не работает? (Linux)

Я знаю, что должен рассчитать, сколько экземпляров работает:

ps x | grep apache2 | wc -l 

закончитесь, если это работает: 2, или иначе: 1

Я также знаю, что существует названная команда test то, что я мог использовать для выполнения проверки, но я не знаю, как использовать test с wc

3
задан 21.07.2013, 13:18

3 ответа

Сценарии запуска на большинстве дистрибутивов Linux обрабатывают это путем сохранения идентификатора Процесса сервиса (демон), когда они запускают его.

Эти PIDs обычно хранятся в /var/run/. Например, в моей системе Apache2 хранит его идентификатор исходного или родительского процесса (полезный для предразветвленных процессов) в /var/run/apache2.pid. Таким образом, можно затем отправить сигналы такой как SIGHUP или SIGSTOP к процессу, чтобы сигнализировать или о перезагрузке конфигурации или остановить сервис (демон).

Одно примечание для помощи с Вашим ps ax поиск процесса стиля должен использовать немного приема для выхода из образца регулярного выражения grep, используемого для соответствия, такого, что это не соответствует себе. Например. ps ax | grep [a]pache2 | wc -l

man test дает Вам основы test команда. Для простых задач в сценариях оболочки, это лучше всего, чтобы не зависеть, на которой оболочке Вы используете. Обычно для основных сценариев, пишущий сценарии, предназначающиеся для Перенесенного Shell (/bin/sh) рекомендуется, поскольку это имеет тенденцию быть самым популярным наименьшим общим знаменателем.

#!/bin/sh

RC= `ps ax | grep [a]pache2 | wc -l`

if [ $RC -gt 0 ]; then
  kill -SIGSTOP `cat /var/run/apache2.pid`
fi
5
ответ дан 07.12.2019, 23:29

Если Вы работаете с ударом, можно сделать это с условными проверками:

#/bin/bash
num="1"
if [ $num -eq "1" ]; then
        echo "got 1"
fi

if [ $num -eq "2" ]; then
        echo "got 2"
fi
1
ответ дан 07.12.2019, 23:29
if (( $(ps x | grep [a]pache2 | wc -l) > 0 ))
then
    do_something
else
    do_something_else
fi

или

case $(ps x | grep [a]pache2 | wc -l) in
    0)
        do_zero_thing
        ;;
    1)
        do_one_thing
        ;;
    *)
        do_default_thing
        ;;
esac

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

1
ответ дан 07.12.2019, 23:29

Теги

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