LinuxForum.Fans
Тема

Удаленное управление демонами

Автор: opryatniyav 195 сообщений 20490 просмотров
#196056

[console]linuxssh02:~ # pgrep -f 'jboss'
13065
13067
13073
linuxssh02:~ # pkill -9 -f 'jboss'
linuxssh02:~ # pgrep -f 'jboss'
linuxssh02:~ #
[/console]
все вопрос снят вот таким вот способом

#196060

opryatniyav, вероятно, есть смысл не сразу «убивать» процесс по pkill -9, а попробовать сначала pkill -15 и только, если он не справится, прибегать к радикальному средству.

#196070

подредактировал свой скриптик и вот что получилось

text
linuxssh01:/bash # cat -A ./ssh_02.sh
#!/bin/bash$
set -x$
REMOTE_IP=${1}$
ERROR_LOG=${REMOTE_IP}_error.log$
ssh $REMOTE_IP /etc/init.d/jboss stop 2>> $ERROR_LOG$
sleep 180$
ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG$
sleep 180$
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG$
scp /opt/test $REMOTE_IP:/opt/test 2>> $ERROR_LOG$
ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG$
[ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG$
set +x$

[console]linuxssh01:/bash # ./ssh_02.sh 10.77.11.37
+ REMOTE_IP=10.77.11.37
+ ERROR_LOG=10.77.11.37_error.log
+ ssh 10.77.11.37 /etc/init.d/jboss stop
Shutting down jboss + sleep 5
+ ssh 10.77.11.37 pkill -9 -f jboss
+ sleep 5
+ ssh 10.77.11.37 pgrep -f jboss
+ scp /opt/test 10.77.11.37:/opt/test
+ ssh 10.77.11.37 /etc/init.d/jboss start
Starting jboss (default)..done
+ '[' -s 10.77.11.37_error.log ']'
+ cat 10.77.11.37_error.log
+ mail -s 'Error log on 10.77.11.37' aleksandr.opryatniy@co.ksoe.com.ua
+ rm -f 10.77.11.37_error.log
+ set +x[/console]

как мне сделать чтоб мой скрипт переставал выполнятся если JBOSS не потух и не убился через pkill
#!/bin/bash$
set -x$
REMOTE_IP=${1}$
ERROR_LOG=${REMOTE_IP}_error.log$
ssh $REMOTE_IP /etc/init.d/jboss stop 2>> $ERROR_LOG$
sleep 180$
ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG$
sleep 180$
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG$
то есть доходил до данного этапа отправлял отчет на почту и завершал выполнение скрипта пропуская копирование файла и запуск jboss
scp /opt/test $REMOTE_IP:/opt/test 2>> $ERROR_LOG$
ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG$

#196104
opryatniyav написал:
то есть доходил до данного этапа отправлял отчет на почту и завершал выполнение скрипта пропуская копирование файла и запуск jboss

Попробуйте так:

text
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG && \
(scp /opt/test $REMOTE_IP:/opt/test 2>> $ERROR_LOG; \
ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG)
[ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG
#196140
text
linuxssh01:/bash # cat -A ssh_02.sh
#!/bin/bash$
set -x$
REMOTE_IP=${1}$
ERROR_LOG=${REMOTE_IP}_error.log$
#ssh $REMOTE_IP /etc/init.d/jboss stop 2>> $ERROR_LOG$
#sleep 5$
#ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG$
#sleep 5$
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG && \$
(scp /opt/test $REMOTE_IP:/opt/test 2>> $ERROR_LOG && \$
ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG)$
[ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG$
set +x$

[console]linuxssh01:/bash # ./ssh_02.sh 10.77.11.37
+ REMOTE_IP=10.77.11.37
+ ERROR_LOG=10.77.11.37_error.log
+ ssh 10.77.11.37 pgrep -f jboss
+ scp /opt/test 10.77.11.37:/opt/test
+ ssh 10.77.11.37 /etc/init.d/jboss start
Starting jboss (default)..done
+ '[' -s 10.77.11.37_error.log ']'
+ cat 10.77.11.37_error.log
+ mail -s 'Error log on 10.77.11.37' aleksandr.opryatniy@co.ksoe.com.ua
+ rm -f 10.77.11.37_error.log
+ set +x[/console]

на почту пришел лог
14938
14940
14946
Error: No valid java found - это нормально и обозначает что jboss стартанул
это значит что ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG && \ отработал без ошибок и выдал номера процессов
а как сделать так чтоб при этом условии скрипт завершал работу

#196144

то есть скрипт должен продолжать работу если ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG не нашел никаких процессов связаных с JBOSSом
может можно каким нибудь образом отталкиваться от лога который он делает?

#196174
opryatniyav написал:
это значит что ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG && \ отработал без ошибок и выдал номера процессов
а как сделать так чтоб при этом условии скрипт завершал работу

Это я напутал, надо

text
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG || \ 
#196176

opryatniyav, не стоит использовать опцию «-A» с командой cat всё время. Я просил вас об этом, когда хотел увидеть и непечатаемые символы. При обычном показе не надо, несколько сбивает с толку.

#196183

&& - выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать;
|| - выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать.

я что то запутался
если нет запущенных процессов то || считает что pgrep не нормально отработал ???
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG || \

#196185
opryatniyav написал:
если нет запущенных процессов то || считает что pgrep не нормально отработал ???

Нет «нормально—ненормально», есть «истинно» или «ложно».
|| — выполнять, если условие ложно, то есть, если нет запущенных процессов.

#196192

проверил все получилось спасибо

вот решил все таки настроить сравнение по MD5
небольшие наброски если не трудно посмотрите
#!/bin/bash
set -x
REMOTE_IP=${1}
ERROR_LOG=${REMOTE_IP}_error.log
FILE=${2}
FILE_MD5SUM=${FILE}.md5

ssh $REMOTE_IP /etc/init.d/jboss stop
sleep 5
ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG
sleep 5
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG || \
(scp ${FILE} $REMOTE_IP:/opt/test 2>> $ERROR_LOG && \
ssh ${REMOTE_IP} md5sum ${FILE} > ${FILE_MD5SUM} && \
md5sum -c --status ${FILE_MD5SUM} && echo "Файл скопировался успешно" || echo "Повторите передачу файла" 2>> $ERROR_LOG
ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG)
[ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG
set +x

#196202
opryatniyav написал:
ssh ${REMOTE_IP} md5sum ${FILE} > ${FILE_MD5SUM} && \
md5sum -c --status ${FILE_MD5SUM} && echo "Файл скопировался успешно" || echo "Повторите передачу файла" 2>> $ERROR_LOG

Я это приводил ради примера — "Файл скопировался успешно" и "Повторите передачу файла" wink
На самом деле при удачном копировании и проверке скрипт должен продолжить свою работу, при неудачной — предпринять несколько попыток передать файл.
Этот бы скрипт привести к нормальному, удобочитаемому виду. && и || хороши для скриптов-однострочников.

#196204

а этот
ssh ${REMOTE_IP} md5sum ${FILE} > ${FILE_MD5SUM}
> знак больше
почему не ровно ?

#196205

можете расписать вкратце каждую строку не могу понять где именно происходит сравнение
ssh ${REMOTE_IP} md5sum ${FILE} > ${FILE_MD5SUM} && \
md5sum -c --status ${FILE_MD5SUM}

#196207
opryatniyav написал:
> знак больше
почему не ровно ?

Это не «больше», это — «подключившись к удалённому хосту, запустить команду md5sum, вывод команды (значение md5sum и имя проверяемого файла) перенаправить (записать) в файл, указанный в переменной ${FILE_MD5SUM}.»

#196208
opryatniyav написал:
можете расписать вкратце каждую строку не могу понять где именно происходит сравнение
ssh ${REMOTE_IP} md5sum ${FILE} > ${FILE_MD5SUM} && \
md5sum -c --status ${FILE_MD5SUM}

«Подключившись к удалённому хосту, запустить команду md5sum, вывод команды (значение md5sum и имя проверяемого файла) перенаправить (записать) в файл, указанный в переменной ${FILE_MD5SUM}. Если (хотя можно обойтись и без проверки условия) команда вернула значение «истинно» на локальном компьютере провести проверку файла-источника, используя файл с контрольной суммой переданного файла».

#196211

вот так

text
#!/bin/bash
set -x
REMOTE_IP=${1}
ERROR_LOG=${REMOTE_IP}_error.log
FILE=${2}
FILE_MD5SUM=${FILE}.md5
ssh $REMOTE_IP /etc/init.d/jboss stop
sleep 5
ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG
sleep 5
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG || \
(scp ${FILE} $REMOTE_IP:/opt/test 2>> $ERROR_LOG && \
ssh ${REMOTE_IP} md5sum /opt/test > ${FILE_MD5SUM} && \
md5sum -c --status ${FILE_MD5SUM} 2>> $ERROR_LOG) && \
ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG)
[ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG
set +x
#196213
opryatniyav написал:
text
ssh $REMOTE_IP /etc/init.d/jboss stop 
sleep 5 
ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG

Поставьте после первой строки из этого фрагмента || \, иначе следующие команды выполняться в любом случае, тогда уж сразу можно pkill -9 вызывать wink

#196216

просто бывает такое что пишешь /etc/init.d/jboss stop он пишет феилд
начинаеш искать процесс а его уже там нет
проверяешь /etc/init.d/jboss status unused
поэтому пофиг пусть делает pkill -9 -f 'jboss' если он и нормально стопарнулся там не будет что убивать ?

#196231

Lupo Alberto, подскажите как сделать сравнение после этой строки ssh ${REMOTE_IP} md5sum /opt/test > ${FILE_MD5SUM}

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