Вы можете избежать двойного поиска, превратив свое ключевое слово в регулярное выражение, которое не соответствует самому себе. И вы можете использовать grep -c
вместо подсчета с wc
. В вашем скрипте вы можете попробовать:
pcount=`ps ax | grep -c "[a]pp"`
В качестве альтернативы используйте фактический pid вместо счетчика процессов:
#!/bin/bash
pid=`ps ax | awk '/[a]pp/{print $1}'`
if ! ps "$pid" >/dev/null; then
/etc/init.d/app start
fi
Обратите внимание, что это все еще очень плохой способ обработки перезапусков службы. Вы должны увидеть, поддерживает ли app свой собственный pid-файл, возможно, где-то в / var / run /, а затем протестировать его содержимое.
#!/bin/sh
if [ -f /var/run/app.pid ]; then
if ps `cat /var/run/app.pid` >/dev/null; then
/etc/init.d/app start
fi
else
/etc/init.d/app start
fi
Или, что еще лучше, запустите приложение , используя daemontools runit или upstart или что-то подобное, что позаботится об этих вещах для вас .