1

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

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

#!/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 форум, заранее спасибо.

2

Ну хорошо пока, делай дальше. Возникнут сложности - спрашивай.

P.S. И тему надо перенести в раздел Работа в командной строке

3

bitmaster пишет:

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

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

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

4 (28.03.2014 13:31:03 отредактировано bitmaster)

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

ps -ef|grep java

показывает

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

5

bitmaster пишет:

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

Так сделайте

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

6

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

7 (28.03.2014 14:24:32 отредактировано bitmaster)

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

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

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

8 (28.03.2014 14:48:52 отредактировано Vascom)

#!/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

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

9

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

10 (28.03.2014 14:55:45 отредактировано Vascom)

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

11

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


#!/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

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

12

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

13

Vascom пишет:

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

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

14

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

15 (29.03.2014 11:51:21 отредактировано i2ks)

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

It is good day to die ...
MS Windows 10
Заметки о главном...

16

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

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

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

17

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

Я конечно далек от мысли...(с)

18 (08.04.2014 13:57:07 отредактировано bitmaster)

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

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

19

bitmaster пишет:

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

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

Был, был и весь вышел...

20

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

21

bitmaster,
Гляньте и здесь — http://wummel.github.io/linkchecker/other.html

Был, был и весь вышел...

22 (08.04.2014 14:05:35 отредактировано xxblx)

bitmaster пишет:

тоесть смотреть есть ли страничка или нет

 Консоль:
[xxblx@localhost ~]$ curl -Is http://xxblx-duke.com | head -1
HTTP/1.1 200 OK
[xxblx@localhost ~]$ curl -Is http://xxblx-duke.com/123.html | head -1
HTTP/1.1 404 Not Found
[xxblx@localhost ~]$ wget http://xxblx-duke.com/123.html
--2014-04-08 14:02:14--  http://xxblx-duke.com/123.html
Распознаётся xxblx-duke.com (xxblx-duke.com)... 31.28.24.133
Подключение к xxblx-duke.com (xxblx-duke.com)|31.28.24.133|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 404 Not Found
2014-04-08 14:02:14 ОШИБКА 404: Not Found.

Когда странички нет, запрос к ней вернет 404-ую ошибку. Если веб-сервер "не против" ab
 Консоль:
[xxblx@localhost ~]$ curl -Is http://linuxforum.ru | head -1
HTTP/1.1 200 OK
[xxblx@localhost ~]$ curl -Is http://linuxforum.ru/123.html | head -1
HTTP/1.1 200 OK
[xxblx@localhost ~]$ wget http://linuxforum.ru/123.html
--2014-04-08 14:03:42--  http://linuxforum.ru/123.html
Распознаётся linuxforum.ru (linuxforum.ru)... 188.64.170.124
Подключение к linuxforum.ru (linuxforum.ru)|188.64.170.124|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: нет данных [text/html]
Сохранение в: «123.html»

    [ <=>                                   ] 57 794      --.-K/s   за 0,06s   

2014-04-08 14:03:43 (996 KB/s) - «123.html» сохранён [57794]


Здесь на LF как видно, это не прокатывает. 123.html, по сути, сохраняется как переименованный index.html, несмотря на то что 123.html вроде как и нету.

Fedora GNOME3

23

большое спасибо, сейчас попробую.

24

Я делал так:

curl --silent http://linuxforum.ru|grep Вход
if [ `echo $?` -eq 0 ]; then echo "True"
else echo "False"
fi

На выходе получим:

<li id="navlogin"><a href="http://linuxforum.ru/login.php">Вход</a></li>
True

а если сделать так:

curl --silent http://linuxforum.ru|grep Войти
if [ `echo $?` -eq 0 ]; then echo "True"
else echo "False"
fi

то получим False

It is good day to die ...
MS Windows 10
Заметки о главном...

25

а вот вопрос если веб сервер упадет то по сути 404 мне выдаваться не будет.  у меня проблема с сервером glassfish , он как бы не падает ибо в процессах он висит, но веб веб сервер не доступен. (из за высоких нагрузок). думал определить "упал он или нет" пингом, но вариант не катит так как он частично работает и пингуется . а конкретно нужную мне страничку пингануть нельзя. в плане командой ping

26

bitmaster пишет:

а вот вопрос если веб сервер упадет то по сути 404 мне выдаваться не будет.  у меня проблема с сервером glassfish , он как бы не падает ибо в процессах он висит, но веб веб сервер не доступен. (из за высоких нагрузок). думал определить "упал он или нет" пингом, но вариант не катит так как он частично работает и пингуется . а конкретно нужную мне страничку пингануть нельзя. в плане командой ping

я же написал как это можно сделать, через curl дергать страницу.

It is good day to die ...
MS Windows 10
Заметки о главном...

27

i2ks пишет:
bitmaster пишет:

а вот вопрос если веб сервер упадет то по сути 404 мне выдаваться не будет.  у меня проблема с сервером glassfish , он как бы не падает ибо в процессах он висит, но веб веб сервер не доступен. (из за высоких нагрузок). думал определить "упал он или нет" пингом, но вариант не катит так как он частично работает и пингуется . а конкретно нужную мне страничку пингануть нельзя. в плане командой ping

я же написал как это можно сделать, через curl дергать страницу.

сейчас попробую. отпишу что получилось

28

а можете дать пояснение этой строке

if [ `echo $?` -eq 0 ]

29

bitmaster, а поискать? http://www.opennet.ru/docs/RUS/bash_scripting_guide/
Это условие, проверяющее код завершения последней выполненной команды. И echo там не нужно.

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

30

yars пишет:

И echo там не нужно.

о как, а как тогда?

It is good day to die ...
MS Windows 10
Заметки о главном...