3

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

ps x | grep apache2 | wc -l 

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

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

3 ответа3

5

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

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

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

man test дает вам основы команды test . Для простых задач в сценариях оболочки лучше избегать зависимости от того, какую оболочку вы используете. Обычно для базовых сценариев рекомендуется написание сценариев, ориентированных на оболочку Borne (/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
1

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

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

if [ $num -eq "2" ]; then
        echo "got 2"
fi
1
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, если apache не работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .