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