У меня есть несколько вопросов относительно сценария инициализации, который я пишу. На самом деле я раньше не делал этого с нуля, поэтому, вероятно, есть несколько советов и приемов, о которых я не знаю. Кроме того, сценарий оболочки — это не то, чем я часто пользовался, поэтому к синтаксису пришлось немного привыкнуть.
Прежде всего, у меня есть функция, чтобы увидеть, работает ли приложение. Причина этого, а не файлы блокировки или что-то подобное, заключается в том, что мне нужен только ОДИН экземпляр, а приложение немного глючит, а плагины иногда могут задерживаться, даже если основное приложение убито.
Так что у меня что-то вроде.
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
и проверка, было ли приложение запущено после этого. В зависимости от результата я печатаю правильное сообщение.