LinuxForum.Fans
Тема

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

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

что значит функцию? если можно то в вкратце объясните

#196293

а все начиналось с этого
ssh 10.77.*.* /etc/init.d/jboss stop || pkill -9 java && scp /u02/file 10.77.*.*:/u02/file && ssh 10.77.*.* /etc/init.d/jboss start
:D :D :D

#196297
opryatniyav написал:
что значит функцию? если можно то в вкратце объясните

Пример приблизительный, скорее всего, не рабочий, только, чтобы объяснить принцип:

text
copy_check()
{
(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)
}
# Копируем файл и проверяем его сумму
copy_check FILE_1

# Копируем ещё один файл файл и проверяем его сумму copy_check FILE_2

#196298

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

#196300

#!/bin/bash
set -x
REMOTE_IP=${1}
ERROR_LOG=${REMOTE_IP}_error.log
FILE=${2}
FILE_2=${3}
FILE_MD5SUM=${FILE}.md5
FILE_MD5SUM_2=${FILE_2}.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 || \ - интересует || так будет работать?
copy_check FILE_1
{
(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)
}
copy_check FILE_2
{
(scp ${FILE_2} $REMOTE_IP:/opt/test_2 2>> $ERROR_LOG && \
ssh ${REMOTE_IP} md5sum /opt/test_2 > ${FILE_MD5SUM_2} && \
(cd /opt; md5sum -c --status ${FILE_MD5SUM_2} 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
вот что то набросал на сколько я понял

#196301

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

#196302
opryatniyav написал:
вот что то набросал на сколько я понял

Нет, вы неправильно поняли: код функции пишется только раз, в нём могут и должны указываться переменные функции, то есть имя файла указывать отдельно не надо.

#196334
newzenon написал:
А почему scp, а не tar+ssh или rsync+ssh?

А зачем множить сущности?

#196339

Там 1 файл всего копируется? тогда да, быстрее не будет.
Я вот не знаю встроенная проверка md5 у кого-нибудь из подобных копировальшиков есть?

#196349
newzenon написал:
Я вот не знаю встроенная проверка md5 у кого-нибудь из подобных копировальшиков есть?

IMHO, rsync.

#196351

Но тогда вопрос напрашивается сам, зачем это шаманство с функциями проверки md5sum?

#196352

newzenon, должен быть выделен компьютер с rsync-сервером.
Если файлов для копирования (синхронизации) будет несколько, это будет оправданно.

#196388

вот что вышло а как посмотреть сравнил ли он md5sum

linuxssh01:/bash # ./rsync.sh 10.77.11.37 /opt/test
set -x
REMOTE_IP=${1}
ERROR_LOG=${REMOTE_IP}_error.log
FILE=${2}
rsync -vvpgozc -e ssh ${FILE} $REMOTE_IP:/opt/ 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 # ./rsync.sh 10.77.11.37 /opt/test
+ REMOTE_IP=10.77.11.37
+ ERROR_LOG=10.77.11.37_error.log
+ FILE=/opt/test
+ rsync -vvpgozc -e ssh /opt/test 10.77.11.37:/opt/
opening connection using ssh 10.77.11.37 rsync --server -vvogpcz . /opt/
delta-transmission enabled
test
total: matches=0 hash_hits=0 false_alarms=0 data=6

sent 112 bytes received 42 bytes 102.67 bytes/sec
total size is 6 speedup is 0.04
+ '[' -s 10.77.11.37_error.log ']'
+ set +x[/console]


-e ssh – указывает rsync использовать протокол ssh.
-z – эта опция указывает использовать сжатие при передаче данных
-vv – эта опция указывает команде rsync выдавать более подробную служебную информацию на старте.
-g – сохранять группу владельца файла
-o – сохранять владельца файла
-p – сохранять права доступа к файлам()
-c - я так понял что это и есть сравнение по md5

#196468

послушался вашего совета и переписал скрипт вот что получилось:

text
#!/bin/bash
set -x
REMOTE_IP=${1}
ERROR_LOG=${REMOTE_IP}_error.log
FILE=${2}
FILE_2=${3}
if (ssh $REMOTE_IP /etc/init.d/jboss stop ;sleep 1) || (ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG sleep 1)
then ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG
else [ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG
fi
if (rsync -vvpgozc -e ssh ${FILE} $REMOTE_IP:/opt/ 2>> $ERROR_LOG && rsync -vvpgozc -e ssh $FILE_2 $REMOTE_IP:/opt/ 2>> $ERROR_LOG)
then ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG
else (rsync -vvpgozc -e ssh ${FILE} $REMOTE_IP:/opt/ 2>> $ERROR_LOG && rsync -vvpgozc -e ssh ${FILE_2} $REMOTE_IP:/opt/ 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 # ./rsync.sh 10.77.11.37 /opt/test /opt/test2
+ REMOTE_IP=10.77.11.37
+ ERROR_LOG=10.77.11.37_error.log
+ FILE=/opt/test
+ FILE_2=/opt/test2
+ 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 pgrep -f jboss
+ rsync -vvpgozc -e ssh /opt/test 10.77.11.37:/opt/
opening connection using ssh 10.77.11.37 rsync --server -vvogpcz . /opt/
delta-transmission enabled
test is uptodate
total: matches=0 hash_hits=0 false_alarms=0 data=0

sent 69 bytes received 26 bytes 190.00 bytes/sec
total size is 13 speedup is 0.14
+ rsync -vvpgozc -e ssh /opt/test2 10.77.11.37:/opt/
opening connection using ssh 10.77.11.37 rsync --server -vvogpcz . /opt/
delta-transmission enabled
test2 is uptodate
total: matches=0 hash_hits=0 false_alarms=0 data=0

sent 70 bytes received 26 bytes 192.00 bytes/sec
total size is 15 speedup is 0.16
+ 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]
если не трудно посмотрите может найдете ошибки или условия которые я не предусмотрел
заранее благодарен

#196494

вот еще модернизировал smile

text
linuxssh01:/bash # cat rsync.sh
#!/bin/bash
set -x
REMOTE_IP=${1}
ERROR_LOG=${REMOTE_IP}_error.log
FILE_IN=${2}
FILE_OUT=${3}
if (ssh $REMOTE_IP /etc/init.d/jboss stop ;sleep 1) || (ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG ;sleep 1)
then ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG
else [ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG
fi
if (rsync -vvpgozc -e ssh ${FILE_IN} $REMOTE_IP:${FILE_OUT} 2>> $ERROR_LOG || sleep 90) || \
(rsync -vvpgozc -e ssh ${FILE_IN} $REMOTE_IP:${FILE_OUT} 2>> $ERROR_LOG || sleep 90) || \
(rsync -vvpgozc -e ssh ${FILE_IN} $REMOTE_IP:${FILE_OUT} 2>> $ERROR_LOG || sleep 90) || \
(rsync -vvpgozc -e ssh ${FILE_IN} $REMOTE_IP:${FILE_OUT} 2>> $ERROR_LOG || sleep 90) || \
(rsync -vvpgozc -e ssh ${FILE_IN} $REMOTE_IP:${FILE_OUT} 2>> $ERROR_LOG)
then ssh $REMOTE_IP /etc/init.d/jboss start 2>> $ERROR_LOG
else [ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $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 # linuxssh01:/bash # ./rsync.sh 10.77.11.37 /opt/test /opt/test
+ REMOTE_IP=10.77.11.37
+ ERROR_LOG=10.77.11.37_error.log
+ FILE_IN=/opt/test
+ FILE_OUT=/opt/test
+ 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 pgrep -f jboss
+ rsync -vvpgozc -e ssh /opt/test 10.77.11.37:/opt/test
opening connection using ssh 10.77.11.37 rsync --server -vvogpcz . /opt/test
delta-transmission enabled
test is uptodate
total: matches=0 hash_hits=0 false_alarms=0 data=0

sent 69 bytes received 26 bytes 63.33 bytes/sec
total size is 13 speedup is 0.14
+ 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 (rsync -vvpgozc -e ssh ${FILE_IN} $REMOTE_IP:${FILE_OUT} 2>> $ERROR_LOG || sleep 90) || \
|| если копия прервалась sleep 90 выполнится и это будет считаться за "истину"? пойдет ли дальше копирование после sleep 90 ?

#196642

подскажите пожалуйста какой командой можно остановить выполнение скрипта?

#196644

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

text
if (ssh $REMOTE_IP /etc/init.d/jboss stop ;sleep 1) || (ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG ;sleep 1)
then ssh $REMOTE_IP pgrep -f 'jboss' >> $ERROR_LOG
else [ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG ;exit

если if jboss не тушится то then pgrep находит процессы как сделать чтоб после этого выполнялся else если процессы присутствуют а если нет то пропускал else

#196654

вопрос снят по поводу

opryatniyav написал:
если if jboss не тушится то then pgrep находит процессы как сделать чтоб после этого выполнялся else если процессы присутствуют а если нет то пропускал else

таким вот способом

text
if (ssh $REMOTE_IP /etc/init.d/jboss stop ;sleep 30) || (ssh $REMOTE_IP pkill -9 -f 'jboss' 2>> $ERROR_LOG ;sleep 15)
then ssh $REMOTE_IP pgrep -f 'jboss' >> $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 ;exit)
fi

как остановить скрипт при выполнении этой команды ([ -s $ERROR_LOG ] && cat $ERROR_LOG | mail -s "Error log on $REMOTE_IP" aleksandr.opryatniy@co.ksoe.com.ua && rm -f $ERROR_LOG ;exit)
exit не подходит почему то

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