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

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

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

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

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] так, как это обычно делают скрипты инициализации. Возможно, есть функция, которую можно использовать для печати этого в стандартной форме?

ОБНОВЛЕНИЕ

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

Однако проблема с демоном остается. Есть ли способ избавиться от &?

ОБНОВЛЕНИЕ 2

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

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

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


person inquam    schedule 24.08.2011    source источник
comment
Не могли бы вы рассказать, как вы это исправили? Как копипаст вашего сценария. У меня такая же проблема. Спасибо !   -  person Pierre-Luc Bertrand    schedule 16.08.2013
comment
Это было некоторое время назад, и я не думаю, что у меня все еще есть сценарий, о котором идет речь. Я проверю вокруг и посмотрю, что я могу найти.   -  person inquam    schedule 16.08.2013


Ответы (2)


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

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.

person tripleee    schedule 24.08.2011

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

person inquam    schedule 31.08.2011