LinuxForum.Fans
Тема

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

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

Как я уже писал, это был только пример. Подразумевалось, что команда проверки вызывалась из каталога, где находится файл-источник.
Поэтому попробуйте так:

text
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} && \
(cd /opt; md5sum -c --status ${FILE_MD5SUM} 2>> $ERROR_LOG)) && \

Объявляя переменную FILE_MD5SUM, следует указать абсолютный путь, например:

text
FILE_MD5SUM=/var/tmp/${FILE}.md5
#196239

не пойму одного
if [ "$FILE_MD5SUM" = "что сюда писать" ]

#196242

думаю может начать добавлять if/then или не стоит заморачиваться на этом

#196244
opryatniyav написал:
не пойму одного
if [ "$FILE_MD5SUM" = "что сюда писать" ]

Зачем?
Если хотите использовать конструкцию if ... fi, то так

text

cd /opt
if md5sum -c --status ${FILE_MD5SUM}; tnen
  ssh $REMOTE_IP /etc/init.d/jboss start
fi
#196245
opryatniyav написал:
думаю может начать добавлять if/then или не стоит заморачиваться на этом

Стоит, читается гораздо проще.

#196259

не могу понять где закрыть скобочку ? открывается она перед scp

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} && \
cd /opt
if md5sum -c --status ${FILE_MD5SUM} 2>> $ERROR_LOG
then ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG
fi
[ -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
#196261
opryatniyav написал:
не могу понять где закрыть скобочку ?

После fi в следующей отдельной строке.
Видите, как неудобно читать подобные конструкции oO

#196263

oO oO oO oO та я в шоке

#196266
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 1
ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG
sleep 1
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} && \
cd /opt
if md5sum -c --status ${FILE_MD5SUM} 2>> $ERROR_LOG
then ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG
fi
)
[ -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 /opt/test
+ REMOTE_IP=10.77.11.37
+ ERROR_LOG=10.77.11.37_error.log
+ FILE=/opt/test
+ FILE_MD5SUM=/opt/test.md5
+ ssh 10.77.11.37 /etc/init.d/jboss stop
Error: No valid java found
Shutting down jboss ..done
+ sleep 1
+ ssh 10.77.11.37 pkill -9 -f jboss
+ sleep 1
+ ssh 10.77.11.37 pgrep -f jboss
+ scp /opt/test 10.77.11.37:/opt/test
+ ssh 10.77.11.37 md5sum /opt/test
+ cd /opt
+ md5sum -c --status /opt/test.md5
+ ssh 10.77.11.37 /etc/init.d/jboss start
Starting jboss (default)..done
+ '[' -s 10.77.11.37_error.log ']'
+ set +x[/console]

отчет на почту почему то не приходит

#196271
opryatniyav написал:
отчет на почту почему то не приходит

...так, если ошибок нет....

#196272
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 1
ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG
sleep 1
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} && \
(cd /opt; 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

[console]linuxssh01:/bash # ./ssh_02.sh 10.77.11.37 /opt/test
+ REMOTE_IP=10.77.11.37
+ ERROR_LOG=10.77.11.37_error.log
+ FILE=/opt/test
+ FILE_MD5SUM=/opt/test.md5
+ ssh 10.77.11.37 /etc/init.d/jboss stop
Error: No valid java found
Shutting down jboss ..done
+ sleep 1
+ ssh 10.77.11.37 pkill -9 -f jboss
+ sleep 1
+ ssh 10.77.11.37 pgrep -f jboss
+ scp /opt/test 10.77.11.37:/opt/test
+ ssh 10.77.11.37 md5sum /opt/test
+ cd /opt
+ md5sum -c --status /opt/test.md5
+ 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]

а так отчет приходит на почту
наверное оставлю в таком виде без if fi

#196273
Lupo Alberto написал:
отчет на почту почему то не приходит

Или перед проверкой отчёта нужно обратно перейти в каталог, где создаётся лог-файл, или в переменной указать абсолютный путь к лог-файлу ошибок.

#196274

обязательно переходить в cd /opt ?

#196277

да есть отчет в /opt/10.77.11.37_error.log

#196278
opryatniyav написал:
обязательно переходить в cd /opt ?

Я пока не могу вспомнить, как по-другому проверить контрольную сумму файла. Можно изобрести ещё один wink «костыль», но это неправильно...

#196279

о да oO а как теперь сюда наставлять повторное копирование если МД5 не совпало

(scp ${FILE} $REMOTE_IP:/opt/test 2>> $ERROR_LOG && \
ssh ${REMOTE_IP} md5sum /opt/test > ${FILE_MD5SUM} && \
(cd /opt; md5sum -c --status ${FILE_MD5SUM} 2>> $ERROR_LOG) &&\
ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG)

это жесть, наверное все таки придется if then else
или есть варианты ?

#196281

чего чего, а костылей в этом скрипте уже хватает :D

#196284
opryatniyav написал:
или есть варианты ?

Правильный вариант — переписать скрипт :D а то я уже в этих && и || запутался :(

#196288

да я тоже об этом подумываю
потому что скорей всего придется передавать два файла а это полная жопа

#196290
opryatniyav написал:
потому что скорей всего придется передавать два файла

Если писать по-нормальному, следует определить функцию для передачи и проверки файла, а там — хоть сто файлов.

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