Вывод стандартных сообщений OK / FAILED из пользовательского сценария init.d - PullRequest
1 голос
/ 24 августа 2011

У меня есть несколько вопросов относительно сценария инициализации, который я пишу. Я фактически никогда не делал это с нуля, поэтому, вероятно, есть несколько советов и приемов, о которых я не знаю. Кроме того, сценарий оболочки - это не то, чем я часто пользовался, поэтому к синтаксису пришлось привыкнуть.

Прежде всего, у меня есть функция, чтобы увидеть, запущено ли приложение. Причина этого вместо lockfiles или аналогичного в том, что я хочу только ОДИН экземпляр, а приложение немного глючит, и плагины могут иногда задерживаться, даже если основное приложение убито.

Так что у меня есть что-то вроде.

isrunning() {
  pids=`ps aux | grep -e 'FooBar' | grep -v grep | awk '{print $2}'`
  if [ ! -n "$pids" ]; then
    return 1
  else
    return 0
  fi
}

Есть ли лучший способ?

Я запускаю основное приложение с

daemon --user apache "./FooBar"

но это повесило выполнение скрипта в этой строке до тех пор, пока FooBar не был прерван.

daemon --user apache "FooBar&"

работает, хотя. Но похоже, что [OK] / [FAILED] , который появляется при запуске сценария инициализации, на самом деле выводится функцией daemon ? Таким образом, даже в случае сбоя выполнения демон по-прежнему сообщает [OK] , поскольку процесс FooBar отсоединен.

Есть ли способ заставить daemon НЕ застрять без отсоединения процесса? Я пробовал вариант -d и т. Д., Но не повезло.

В противном случае я думал просто сделать sleep 3 и затем проверить isrunning , который работает нормально. Но тогда я не знаю, как печатать сообщения [OK ] / [FAILED] красивым, приятным способом, который обычно делают сценарии инициализации. Возможно, есть функция, которую можно использовать, чтобы напечатать ее в стандартной форме?

UPDATE

Я нашел решение для печати сообщений. Кажется, это действительно функции для этого. успех и сбой будет печатать сообщения.

Хотя проблема с демоном осталась. Любой способ избавиться от & ?

ОБНОВЛЕНИЕ 2

Я нашел обходной путь и использовал

su -m -c "./FooBar&" apache

и проверка запуска приложения после этого. В зависимости от результата я печатаю правильное сообщение.

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Я нашел решение для печати сообщений. Кажется, это действительно функции для этого. Успех и неудача напечатает сообщения.

0 голосов
/ 24 августа 2011

Используемый вами скрипт является неправильным ответом на часто задаваемые вопросы.Вместо этого попробуйте эту более простую версию:

isrunning () {
  pids=`ps aux | awk '/FooBar/{print $2}'`
  if [ ! -n "$pids" ]; then
    return 1
  else
    return 0
  fi
}

У меня очень большой соблазн установить код выхода и из awk:

isrunning () { ps aux | awk '/FooBar/{print $2;exit 0}END{exit 1}'; }

Если вы работаете в Linux, возможно, вам следуетиспользуйте вместо этого pidof.

...