LinuxForum.Fans
Тема

Помогите написать bash скрипт

Автор: bitmaster 39 сообщений 8762 просмотров
#374310

Что нужно?
нужен скрипт который будет непосредственно с сервера запускаться каждые 5 мин по крону. что он должен делать?
1) проверять урл на доступность командой ping (если запрос отвалился по таймауту, скажем 30 сек) мы можем утверждать что приложение не доступно и нам необходимо перезагрузить сервер приложений.
- для начала необходимо узнать PID процесса под которым запущен мой сервер приложений по названию сервера приложений. пусть будет GlassFish
- убить этот процесс и убедится что он действительно умер.
- после чего запускать сервер приложений GlassFish start
2) если пинг нормальный то ничего не делать.

пока нашел как сделать пинг скрипт

text

#!/bin/bash
 
ADDRESS="www.mysite.com"
 
if ping -c 1 -s 1 -W 1 $ADDRESS
then
    echo "Connection Good "
else
    echo "Connection Lost "
fi

давно искал крупный *nix форум, заранее спасибо.

#374316
"bitmaster" написал:
- для начала необходимо узнать PID процесса под которым запущен мой сервер приложений по названию сервера приложений. пусть будет GlassFish

Нормальный демон при запуске создает файл в котором содержится pid.
Иначе

text

ps -e  | grep "$name" | awk -F' ' '{print $1}'
#374329

смотрите мне нужен pid конкретного апликейшн сервера который работает под java
делаю

text
ps -ef|grep java

показывает

text
user   10774     1  1 Mar27 ?        00:24:54 /home/user/jdk1.6.0_21/bin/java -cp /home/user/glassfish3/glassfish/modules/glassfish.jar -XX:+UnlockDiagnosticVMOptions -XX:MaxPermSize=192m -XX:New и прочеее

тоесть в данном случае нужный мне PID 10774, а если у меня будет много апликейшен серверов glassfish у каждого будет свой процесс как я понимаю. а убивать мне нужен конкретно тот который находится тут
/home/tomcat/glassfish3/glassfish/modules/glassfish.jar

#374332
"bitmaster" написал:
а убивать мне нужен конкретно тот который находится тут /home/tomcat/glassfish3/glassfish/modules/glassfish.jar

Так сделайте

text

ps -ef  | grep "/home/tomcat/glassfish3/glassfish/modules/glassfish.jar" | awk -F' ' '{print $2}'
#374333

Ну и сделай grep по этой строке /home/tomcat/glassfish3/glassfish/modules/glassfish.jar

#374337

и так как вытащить нужный pid я разобрался с вашей помощью.

text
ps -ef|grep java|grep glassfish|awk '{print $2}'

таким образом я вытаскиваю единственный нужный мне pid// так с нужными командами я разобрался, вот теперь как бы мне из них сделать скрипт, по выше указанной задаче.

#374344
text
#!/bin/bash
 
ADDRESS="www.mysite.com"
 
if ! ping -c 1 -s 1 -W 1 $ADDRESS
then
    PID=`ps -ef|grep java|grep glassfish|awk '{print $2}'`
    kill -p $PID
    GlassFish start
fi

Ну запуск своего сервера пропиши сам как надо.
И добавляй запуск этого скрипта в крон.

#374345

спасибо большое. а как можно проверить убился ли этот процесс или нет

#374346
text
PID=`ps -ef|grep java|grep glassfish|awk '{print $2}'`
while [ $PID != "" ]
do
    kill -p $PID
    PID=`ps -ef|grep java|grep glassfish|awk '{print $2}'`
done

Нечто вроде этого.

Вообще вот читай http://www.bash-scripting.ru/abs/chunks/index.html

#374351

получается полный скрипт так выглядит?

text
#!/bin/bash
 
ADDRESS="www.mysite.com"
 
if ! ping -c 1 -s 1 -W 1 $ADDRESS
then
    PID=`ps -ef|grep java|grep glassfish|awk '{print $2}'`
    kill -p $PID

PID=`ps -ef|grep java|grep glassfish|awk '{print $2}'`

while [ $PID != "" ] do kill -p $PID PID=`ps -ef|grep java|grep glassfish|awk '{print $2}'` done GlassFish start fi

спасибо большое

#374352

Да, сойдёт.
Только ты проверь, я по памяти конструкции писал, мог и ошибиться.

#374355
"Vascom" написал:
Да, сойдёт.
Только ты проверь, я по памяти конструкции писал, мог и ошибиться.

а может быть такое что команда kill -p не сработает. , попахивает вечным циклом)) если такое произойдет

#374356

Сделай как тебе нужно. Я лишь пример привёл.

#374426

ping не со всем корректно, надо проверять на наличие странички или еще чего либо, я бы сделал все через curl, а не через ping, ихмо так будет корректней.
И не надо таких сложных конструкций, есть же pgrep -f , к примеру для tomcat: pgrep -f catalina.sh покажет pid tomcat.

#374433

опять же хеши.

жду помидоров в свою репу

#374566

греп и прочие пгреп не промогут, про пид в файлах пишут неучи

#375708

Мужики, такая проблема, пингануть ресурс не проблема и проверить его на доступность. а как проверить на доступность url , кто знает ? тоесть смотреть есть ли страничка или нет.

Думаю можно wget ом только так чтоб страничка не скачивалась

#375709
"bitmaster" написал:
а как проверить на доступность url , кто знает ? тоесть смотреть есть ли страничка или нет

«Скормить» её wget или curl — если скачивается, значит есть ;)

#375710

Через curl скачиваешь страничку. Можешь посмотреть что там скачалось, распарсить и т.п.

Войдите или зарегистрируйтесь, чтобы ответить.