[console]linuxssh02:~ # pgrep -f 'jboss'
13065
13067
13073
linuxssh02:~ # pkill -9 -f 'jboss'
linuxssh02:~ # pgrep -f 'jboss'
linuxssh02:~ #
[/console]
все вопрос снят вот таким вот способом
opryatniyav, вероятно, есть смысл не сразу «убивать» процесс по pkill -9, а попробовать сначала pkill -15 и только, если он не справится, прибегать к радикальному средству.
как мне сделать чтоб мой скрипт переставал выполнятся если 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$
на почту пришел лог
14938
14940
14946
Error: No valid java found - это нормально и обозначает что jboss стартанул
это значит что ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG && \ отработал без ошибок и выдал номера процессов
а как сделать так чтоб при этом условии скрипт завершал работу
то есть скрипт должен продолжать работу если ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG не нашел никаких процессов связаных с JBOSSом
может можно каким нибудь образом отталкиваться от лога который он делает?
это значит что ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG && \ отработал без ошибок и выдал номера процессов
а как сделать так чтоб при этом условии скрипт завершал работу
opryatniyav, не стоит использовать опцию «-A» с командой cat всё время. Я просил вас об этом, когда хотел увидеть и непечатаемые символы. При обычном показе не надо, несколько сбивает с толку.
&& - выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать;
|| - выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать.
я что то запутался
если нет запущенных процессов то || считает что pgrep не нормально отработал ???
ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG || \
Я это приводил ради примера — "Файл скопировался успешно" и "Повторите передачу файла" wink
На самом деле при удачном копировании и проверке скрипт должен продолжить свою работу, при неудачной — предпринять несколько попыток передать файл.
Этот бы скрипт привести к нормальному, удобочитаемому виду. && и || хороши для скриптов-однострочников.
можете расписать вкратце каждую строку не могу понять где именно происходит сравнение
ssh ${REMOTE_IP} md5sum ${FILE} > ${FILE_MD5SUM} && \
md5sum -c --status ${FILE_MD5SUM}
Это не «больше», это — «подключившись к удалённому хосту, запустить команду md5sum, вывод команды (значение md5sum и имя проверяемого файла) перенаправить (записать) в файл, указанный в переменной ${FILE_MD5SUM}.»
можете расписать вкратце каждую строку не могу понять где именно происходит сравнение
ssh ${REMOTE_IP} md5sum ${FILE} > ${FILE_MD5SUM} && \
md5sum -c --status ${FILE_MD5SUM}
«Подключившись к удалённому хосту, запустить команду md5sum, вывод команды (значение md5sum и имя проверяемого файла) перенаправить (записать) в файл, указанный в переменной ${FILE_MD5SUM}. Если (хотя можно обойтись и без проверки условия) команда вернула значение «истинно» на локальном компьютере провести проверку файла-источника, используя файл с контрольной суммой переданного файла».
просто бывает такое что пишешь /etc/init.d/jboss stop он пишет феилд
начинаеш искать процесс а его уже там нет
проверяешь /etc/init.d/jboss status unused
поэтому пофиг пусть делает pkill -9 -f 'jboss' если он и нормально стопарнулся там не будет что убивать ?