LINUX.ORG.RU

Залипает скрипт

 ,


2

1

Добрый день, многоуважаемый ЛОР!

Пишу скрипт для автоматизации своей же работы ...
Есть множество серверов, нужно скопировать туда пару rpm пакетов, остановить некоторые сервисы, обновить rpm пакеты, запустить сервисы ... То, что сделал приведено ниже, но почему-то после выполнения команд (на шаге ssh -l root ${ip} ...) исполнение дальше не идет, скрипт залипает на одном месте, хотя команды выполнились и все ок. Wtf?

#!/bin/bash
log="$0.log"

PKG1=`ls | grep pkg  | sort -r |head -1`
# PKG2=`ls | grep pkg2 | sort -r |head -1`
#...

usage() {
	echo 'Usage:'
	echo '...'
}

echo2() {
	echo $1
	echo `date +"%r %F"` $1 >> $log
}

install() {

	ip=$1
	echo2 "Connecting to $ip..."

	echo2 "Copying files to $ip"
	scp -B -o "ConnectTimeout 5" $PKG root\@${ip}:/root/ >> $log 2>&1

	echo2 "Executing commands on $ip"

	ssh -l root ${ip} 	"service blabla1 stop;	\
				 service blabla2 stop;	\
				 service blabla3 stop;	\
				 rpm -Uhv $PKG1;	\
				 service blabla1 start;	\
				 service blabla2 start;	\
				 service blabla3 start" >> $log 2>&1

	echo2 "Done. Have a lot of fun!"
	echo '' >> $log
}

case $1 in

	-h|--help)
		usage
		;;

	-i|--ip)

		for ip in `echo $* |  grep -Po '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'`; do
			install $ip
		done
		;;

	*)
		usage
		;;

esac

exit 0

★★★★★

юзай dsh

типа твой scp:
cat /path/to/pkg/$PKG | dsh -i -M -c -f list_of_servers «cat > /var/tmp/$PKG»

потом исполнение
dsh -M -c -f list_of_servers «service blabla1 stop; rpm -Uhv $PKG1; service blabla1 start»

sdio ★★★★★
()
Ответ на: комментарий от sdio

dsh ... Да, штука крутая, но мне не дадут устанавливать «что-то свое» - серверов до фига :) ...
В общем не вариант. Может быть я что-то накосячил в скрипте? :(

renya ★★★★★
() автор топика
Ответ на: комментарий от sdio

Я понял, но «не вариант» в общем ... «Корпоративное зло» и т.д. %(

renya ★★★★★
() автор топика

ls | grep pkg

ls *.pkg

Видимо какая-то из команд не возвращает управление.
Если вручную запустить то как отработает?
Попробуйте wait добавить после каждой команды

zolden ★★★★★
()

Как люди мучаются без PORTAGE_BINHOST. Во-первых,

echo >/var/log/blablablascript
exec &>>/var/log/blablablascript
где-нибудь вначале достаточно. Во-вторых, case можно сделать проще — если «$@» не пуст, и первая опция не '-h' , значит, там ip-адреса. В-третьих, ты не можешь даже сохранить ошибки, которые выдаёт ssh, потому что отправляешь в лог только stdout, но я прозреваю, что ssh не хватает опции '-t' для реквеста псевдо-tty.

Deleted
()
Последнее исправление: fargred (всего исправлений: 1)

2 zolden:

ls | grep pkg

ls *.pkg

Верно :)

Видимо какая-то из команд не возвращает управление.
Если вручную запустить то как отработает?

Запустил руками:

ssh -l root ip "service blabla1 stop; service blabla2 stop; service blabla3 stop; service blabla1 start; service blabla2 start; service blabla3 start"
Выхлоп в stdout говорит, что сервисы успешно остановлены/поднялись, но опять таки управление не передалось и все «залипло» ...

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

Поставил wait - все так же :\

renya ★★★★★
() автор топика
Ответ на: комментарий от Deleted

но я прозреваю, что ssh не хватает опции '-t' для реквеста псевдо-tty.

ОМГ! Вбил

ssh -l root ip -t "service blabla1 stop; service blabla2 stop; service blabla3 stop; service blabla1 start; service blabla2 start; service blabla3 start"
... и заработало! О_О ... Пойду скрипт тестить.

renya ★★★★★
() автор топика

fargred, спасибо за помощь - все заработало. :)
sdio и zolden, спасибо за советы!

renya ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.