Тестирование, если процесс работает через если и-z

Разделение конфигурационных файлов является способом управлять ими. Путем помещения строк конфигурации, характерных для модуля в их собственные файлы, становится намного легче включить и отключить модули. Это также помогает управлению ими, потому что теперь у Вас только есть маленький конфигурационный файл для редактирования. (Предположите открывать 500 строк httpd.conf и искать неправильную опцию.)

Различные системы, кажется, имеют различные способы разделить апачские конфигурационные файлы. Например, на моем хинду существуют modules.d/ и vhosts.d/, в то время как на моей Ubuntu существует conf.d/, mods-available/, mods-enabled/, sites-available/ и sites-enabled/. Можно предположить то, что они делают именем или смотрят внутри httpd.conf для Include строки.

2
26.08.2011, 04:26
3 ответа

Попытайтесь перенестись $(...) в двойных кавычках:

if [ -z "$(ps aux | grep '[n]m-applet')" ]; then

Но Вы могли бы хотеть попытаться использовать pgrep или ps axo cmd | grep '[n]m-applet' вместо этого.

9
27.01.2020, 21:49

Та ошибка прибывает из предоставления нескольких аргументов-z. Это - унарный оператор, и если $() расширяется до чего-то с $IFS в нем, это будет видеть несколько аргументов. Для фиксации этого можно поместить кавычки вокруг этого как так: [ -z "$(ps...)" ].

В этом случае Вам на самом деле не нужен тест ([]) потому что grep возвратится ненулевой, если он ничего не найдет. Можно сделать:

if ps aux | grep '[n]m-applet' > /dev/null; then

И Вы могли бы хотеть видеть, планируете ли системы Вы развертывание этого, чтобы иметь pgrep. Это, сделан для поиска процессов, которые соответствуют шаблону.

Кроме того, Вы могли бы хотеть сценарий к не фон nm-апплет. Таким образом, сценарий заблокируется, пока nm-апплет не умирает.

Наконец, Вы могли бы хотеть посмотреть на Monit, который сделан для того, чтобы сделать то, что делает Ваш сценарий.

6
27.01.2020, 21:49
  • 1
    Мог бы хотеть добавить также -s к grep или близкому stdout (>&-) предотвратить вывод, добирающийся до пользователя. –  Arcege 26.08.2011, 05:21
  • 2
    Спасибо, @Arcege; я отредактировал включенный'>/dev/null'. –  Shawn J. Goff 30.10.2011, 17:52

Я не уверен в Ваших причинах while [ true ]; do и я предложение второго Arcege для использования pgrep.

#!/bin/bash
while true; do 
    if ! pgrep nmapplet &>/dev/null; then
       echo "Bugger died, resurrecting..."
       nm-applet &>/dev/null
       disown $!
    fi
    sleep 3
done
3
27.01.2020, 21:49
  • 1
    необходимо поместить pgrep в бесконечном цикле –  glenn jackman 26.08.2011, 04:54
  • 2
    @glenn Вы возражаете объяснять почему? Переменная недостаточно? –  jasonwryan 26.08.2011, 04:55
  • 3
    Вы устанавливаете переменную при запуске сценария. Даже если процесс умрет, то тест "-z" никогда не перестанет работать, потому что переменная никогда не изменяется. –  glenn jackman 26.08.2011, 04:59
  • 4
    Более простой использовать статус выхода. Обновленный. –  Mikel 07.11.2012, 00:38

Теги

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