еклмн вот это я лошара ))
точно работает
[console]linuxssh01:/bash # [ -f scrip.log ] && cat scrip.log | mail -r "Error log on $(hostname -f)" root
linuxssh01:/bash # send-mail: warning: -f option specified malformed sender: Error log on linuxssh01.site
linuxssh01:/bash # mail
mailx version nail 10.6 11/15/03. Type ? for help.
"/var/mail/root": 3 messages 3 new
>N 1 root@linux.site Thu Sep 15 18:28 28/878 SuSEconfig: xntp.caveats
N 2 root@linux.site Thu Sep 15 18:28 43/1819 SuSEconfig: SuSEfirewall2_update
N 3 Error@ksoe.com.ua, Fri Sep 23 18:11 25/893
[/console]
Удаленное управление демонами
opryatniyav, предлагаю всё же пересмотреть концепцию решения wink
Сам скрипт находится на удалённой машине.
Скрипт останавливает сервис, скачивает нужный файл, запускает сервис.
Если на каком-либо из этапов происходит ошибка, отправляет отчёт.
На управляющем компьютере вы запускаете только что-то вроде
[console]ssh 10.77.*.* /usr/local/sbin/SCRIPT.sh[/console]
а можно чтоб вместо (hostname -f) святился IP сервака ?
а можно чтоб вместо (hostname -f) святился IP сервака ?
Попробуйте
[console]hostname -i[/console]
smile да все получилось только он пишет айпи клиента на котором скрипт
поэтому придется ка кто пересматривать концепцию :o
а это не очень удобно в моем случае придется везде настраивать почту и т.д.
буду писать вместо "Error log on $(hostname -f)"
"Error log on имя сервака"
вот что получилось в итоге :
#!/bin/bash
ssh 10.77.11.37 /etc/init.d/jboss stop 2>>script.log || \
pkill -9 java 2>>script.log && \
scp /u02/file 10.77.11.37:/u02/file 2>>script.log && \
ssh 10.77.11.37 /etc/init.d/jboss start 2>>script.log
[ -f script.log ] && cat script.log | mail -r "Error log on namehost" aleksandr.opryatniy@co.ksoe.com.ua
только вот проблемка выходит что если нет связи с сервером то до отправки почты скрипт не доходит
что можете посоветовать ?
ssh 10.77.11.37 /etc/init.d/jboss stop 2>>script.log || \
pkill -9 java 2>>script.log && \
Мне эта часть кажется неправильной: вторая команда, судя по всему, запускается на локальной машине.
Попробуйте такой вариант:
...
ssh 10.77.11.37 '/etc/init.d/jboss stop || pkill -9 java' 2>>script.log && \
...
А сервер можно пинговать перед запуском скрипта.
доброе утро Lupo Alberto wink
там ошибочка вышла во второй строке
забыл ssh дописать
#!/bin/bash
ssh 10.77.11.37 /etc/init.d/jboss stop 2>>script.log || \
ssh 10.77.11.37 pkill -9 java 2>>script.log && \
scp /u02/file 10.77.11.37:/u02/file 2>>script.log && \
ssh 10.77.11.37 /etc/init.d/jboss start 2>>script.log
[ -f script.log ] && cat script.log | mail -r "Error log on namehost" aleksandr.opryatniy@co.ksoe.com.ua
насчет пинга получается что он и не нужен как таковой потому что если нет связи то ssh не может отработать и пишет в лог такую ошибку
ssh: connect to host 10.77.11.37 port 22: No route to host
только по почте он не отправляет лог
подскажите почему?
а когда связь есть с сервером то лог отправляется без проблем
После первой строки скрипта #!/bin/bash добавьте ещё одну —
set -xа последней строкой —
set +xи покажите вывод скрипта при различных ситуациях.
откорректировал скрипт как вы советовали
ssh 10.77.11.37 '/etc/init.d/jboss stop || pkill -9 java' 2>>script.log && \
выдает такую ошибку
bash: line 1: etc/init.d/jboss: No such file or directory
а если так то все нормально работает
ssh 10.77.11.37 /etc/init.d/jboss stop 2>>script.log || \
ssh 10.77.11.37 pkill -9 java 2>>script.log && \
откорректировал скрипт как вы советовали
ssh 10.77.11.37 '/etc/init.d/jboss stop || pkill -9 java' 2>>script.log && \
ssh 10.77.11.37 /etc/init.d/jboss stop 2>>script.log || \
ssh 10.77.11.37 pkill -9 java 2>>script.log && \
В какой из этих вариантов скрипта вы добавляли?
Покажите свой окончательный вариант скрипта.
Включение команды set -x включает отображение всех команд и их аргументов при выполнении скрипта. Возможно, тогда станет понятнее, где скрипт стопорит.
[console]#!/bin/bash
set -x
ssh 10.77.11.37 /etc/init.d/jboss stop 2>>ssh_02.log || \
ssh 10.77.11.37 pkill -9 java 2>>ssh_02.log && \
scp /opt/test 10.77.11.37:/opt/test 2>>ssh_02.log && \
ssh 10.77.11.37 /etc/init.d/jboss start 2>>ssh_02.log
[ -f ssh_02.log ] && cat ssh_02.log | mail -s "Error log on ssh_02" aleksandr.opryatniy@co.ksoe.com.ua
set +x[/console]
вот что он выдал
+ ssh 10.77.11.37 /etc/init.d/jboss stop
Shutting down jboss ..done
+ scp /opt/test 10.77.11.37:/opt/test
+ ssh 10.77.11.37 /etc/init.d/jboss start
Starting jboss (default)..done
+ '[' -f 'ssh_02.log]'
./ssh_02.sh: line 7: [: missing `]'
+ set +x
[ -f ssh_02.log ]
А если заменить на
test -f ssh_02.logвот что выдало когда связь с сервером есть
+ ssh 10.77.11.37 /etc/init.d/jboss stop
Shutting down jboss ..done
+ scp /opt/test 10.77.11.37:/opt/test
+ ssh 10.77.11.37 /etc/init.d/jboss start
Starting jboss (default)..done
+ test -f ssh_02.log
+ cat ssh_02.log
+ mail -s 'Error log on ssh_02' aleksandr.opryatniy@co.ksoe.com.ua
+ set +x
на почту пришло письмо с ошибками в теле письма
и вот что выдало когда связи с сервером нет
+ ssh 10.77.11.37 /etc/init.d/jboss stop
+ ssh 10.77.11.37 pkill -9 java
+ test -f ssh_02.log
+ cat ssh_02.log
+ mail -s 'Error log on ssh_02' aleksandr.opryatniy@co.ksoe.com.ua
+ set +x
на почту пришло письмо с прикрепленным файлом attachment
и внутри етого файла
ssh: connect to host 10.77.11.37 port 22: No route to host
ssh: connect to host 10.77.11.37 port 22: No route to host
Покажите вывод
[console]
cat -A ssh_02.sh
[/console]
+ '[' -f 'ssh_02.log]'
У вас, видимо, перед последней скобкой «]» нет пробела.
opryatniyav, в этом скрипте не учтено много различных ситуаций и сама его структура неправильна.