LINUX.ORG.RU

bash-скрипт по ssh

 , , ,


1

2

Всем доброго времени суток.

Необходимо обновить на группе машин 1с. Есть каталог где лежат .deb, по сути подключаешься к машине, и выполняешь sudo dpkg -i *.deb. Ввиду того, что машин таких порядка 20 и действие придётся выполнять в будущем еще, то решил накатать скрипт. Узнал про expect. Все работает, но столкнулся с такой штукой, что если я выставляю set timeout 2, то скрипт завершается раньше, чем установятся все пакеты 1с. Если же set timeout 60, то всё норм. Я правильно понимаю, что set timeout отражает и время выполнения команды, и время ожидания expect?

Сам скрипт, на всякий случай.


В bash есть wait. В твоем случае, пока все пакеты не установятся, скрипт будет в ожидании.

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

У нас puppet есть. Но, о нем я подумал уже после того как наваял скрипт. Вопрос скорее про set timeout. С целью самообразования, так скажем.

hanharr
() автор топика

Ваш вопрос странен. expect ожидает появления некоей информации, которая у вас и появится после выполнения команды. Как этот timeout может подразумевать что-то другое?

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

отражает и время выполнения команды, и время ожидания expect

Нет, он ждет наступления одного из трех событий, совпадение патерна, или таймаут, или EOF.

Я обычно в конце выдавал команду `logout` и ждал EOF.

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

Хм, подскажите, как я понимаю при set timeout -1 expect будет ждать без таймаута вообще, пока событие не случится. Как тогда можно обойти ситуацию, что часть хостов у меня спросит Are you sure you want to continue connecting (yes/no)?, а часть нет?

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

А, использовать условие я полагаю. Что-то я совсем уже.

hanharr
() автор топика

timeout устанавливается для каждого последующего оператора expect

anonymous
()

Зачем тут вообще expect?
Делай авторизацию по ключам, дальше нечто вроде
for host in hosts;do ssh $host myscript.sh;done

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

Плюсую. Аффтар, открой для себя авторизацию по ключу

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

А еще есть чудо программка scp так с нею вообще можно все делать не отрываясь от телевизора.

scp /debsource/*.deb root@host:/tmp/
ssh root@host dpkg -i /tmp/*.deb
AfterWork
()
Ответ на: комментарий от former_anonymous

но лучше всё-таки использовать кавычки

targitaj ★★★★★
()

Почему не хотите освоить локальный репозиторий и централизованное обновление подписчиков по расписанию/оповещению?

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

да, только вместо scp следует использовать rsync

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

Не успевал. Сейчас начал ковырять puppet. Он у нас по сути централизовано обновляет всех пользователей, думаю через него отсечь бухов и в следующий раз накатывать им по расписанию новую версию клиентов.

hanharr
() автор топика
List_OS=/home/lalala/list_os.txt
File_Log=/home/lalala/File_Log.txt
cat $List_OS | while read remote;
do
ssh -T $remote < /home/lalala/scripts.sh >> $File_Log
done

локальный скрипт запускать на удаленных тачках. и результат записывать в файл. Один скрипт, лежит локально. Запускается как будто локальный на каждой тачке. Тебе остается только условия нормально обработать.

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

Интересная мысля, но тут надо раскидывать один скрипт локально, т.е. ковырять puppet, а в этом случае лучше уж сразу настроить нормальное обновление через него. Вопрос вообще был больше про timeout. :D

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