что значит функцию? если можно то в вкратце объясните
Удаленное управление демонами
а все начиналось с этого
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
что значит функцию? если можно то в вкратце объясните
Пример приблизительный, скорее всего, не рабочий, только, чтобы объяснить принцип:
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
#!/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
Почитайте, чтобы быть в теме — http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html
#!/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
вот что то набросал на сколько я понял
я бы с радостью почитал только вот времени не хватает целый день на работе занимаюсь тикучкой, а потом остаюсь после работы и делаю этот проект, в надежде на повышение оклада.
Но башка уже не варит под вечер.
вот что то набросал на сколько я понял
Нет, вы неправильно поняли: код функции пишется только раз, в нём могут и должны указываться переменные функции, то есть имя файла указывать отдельно не надо.
А почему scp, а не tar+ssh или rsync+ssh?
Тут интересное.
А почему scp, а не tar+ssh или rsync+ssh?
А зачем множить сущности?
Там 1 файл всего копируется? тогда да, быстрее не будет.
Я вот не знаю встроенная проверка md5 у кого-нибудь из подобных копировальшиков есть?
Я вот не знаю встроенная проверка md5 у кого-нибудь из подобных копировальшиков есть?
IMHO, rsync.
Но тогда вопрос напрашивается сам, зачем это шаманство с функциями проверки md5sum?
newzenon, должен быть выделен компьютер с rsync-сервером.
Если файлов для копирования (синхронизации) будет несколько, это будет оправданно.
вот что вышло а как посмотреть сравнил ли он 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
послушался вашего совета и переписал скрипт вот что получилось:
#!/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]
если не трудно посмотрите может найдете ошибки или условия которые я не предусмотрел
заранее благодарен
вот еще модернизировал smile
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 ?
подскажите пожалуйста какой командой можно остановить выполнение скрипта?
начал тестировать скрипт возник вопросик
в данной части скрипта
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
вопрос снят по поводу
если if jboss не тушится то then pgrep находит процессы как сделать чтоб после этого выполнялся else если процессы присутствуют а если нет то пропускал else
таким вот способом
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 не подходит почему то