Автор Тема: скрипт выключения[решено]  (Прочитано 4725 раз)

ska

  • Гость
Одним щелчком выключить все компы. При этом хотелось бы видеть в терминале как идет процесс выключения.
#! /usr/bin/expect -f
#выключаем linlight1
spawn ssh 192.168.0.25
expect -re "]$"
send "sudo /sbin/poweroff\r"
expect -re "The system is going down for system halt NOW!"
exit 0
send "\r"
spawn ssh 192.168.0.27
expect -re "]$"
send "sudo /sbin/poweroff\r"
expect -re "The system is going down for system halt NOW!"
exit 0
send "\r"
#выключаемlinlite3
spawn ssh 192.168.0.28
expect -re "]$"
send "sudo /sbin/poweroff\r"
expect -re "The system is going down for system halt NOW!"
exit 0
send "\r"
Если первый комп уже выключен, то скрипт останавливает работу
[wasya@master ~]$ /home/wasya/comps_off_1.sh
spawn ssh 192.168.0.25
ssh: connect to host 192.168.0.25 port 22: No route to host
send: spawn id exp7 not open
    while executing
"send "sudo /sbin/poweroff\r""
    (file "/home/wasya/comps_off_1.sh" line 5)

можно ли добавить проверку, если комп выключен (no route), то переходить к следующему блоку скрипта?
И вообще, даже если все компы работают, обрабатывается только первый по очередности кусок кода. Почему?
« Последнее редактирование: 27.10.2012 03:13:37 от ska »

Оффлайн asket

  • Участник
  • *
  • Сообщений: 355
  • просто пользователь..
Re: скрипт выключения
« Ответ #1 : 19.08.2012 00:52:50 »
Я похожую задачу решал запуском bash-скрипта, который через fping проверял доступность узла, и при его доступности вызывал expect-скрипт выключения. Если нет- то просто переходил к следующему адресу в списке.

ska

  • Гость
Re: скрипт выключения
« Ответ #2 : 03.10.2012 04:50:30 »
#! /usr/bin/expect -f
nix_hosts="192.168.0.15 192.168.0.16 192.168.0.18"
nix_hosts_to_shutdown=`/usr/sbin/fping -a $nix_hosts`;
for host in $nix_hosts_to_shutdown;
  do spawn ssh $host;
  expect -re "~]$";
  send "sudo /sbin/poweroff\r";
  expect -re "The system is going down for system halt NOW!";
  exit 0;
done
Не пойму, в скрипте c expect нельзя использовать переменные что-ли? Только команды? Пытаюсь выполнить код выше, получаю
[linux@master ~]$ ./poweroff.sh
invalid command name "nix_hosts="192.168.0.15"
    while executing
"nix_hosts="192.168.0.15 192.168.0.16 192.168.0.18""
    (file "./poweroff.sh" line 2)


Оффлайн Andrey

  • Участник
  • *
  • Сообщений: 734

Оффлайн rotkart

  • Участник
  • *
  • Сообщений: 661
Re: скрипт выключения
« Ответ #4 : 03.10.2012 08:47:51 »
Одним щелчком выключить все компы. При этом хотелось бы видеть в терминале как идет процесс выключения.
Я вот так вычитал и придумал:
for i in `seq 101 113`; do echo $i; screen -m -d -S $i ~/bin/class_upgrade.sh $i; doneНу и пишите себе разные скрипты для разных ситуаций, в т.ч. и выключения :-)
[user@cab303 ~]$ cat ~/bin/class_upgrade.sh
#!/bin/bash
ssh-add
ssh root@192.168.103.$1 "apt-get update && apt-get -y dist-upgrade"
ssh root@192.168.103.$1 "yes | update-kernel && apt-get clean && shutdown -r now"
Научить нельзя, научиться можно.

ska

  • Гость
Re: скрипт выключения
« Ответ #5 : 13.10.2012 07:16:37 »
спасибо за подсказку. Ваш способ, наверное попроще и удобнее. Так как баш. Я все-таки доканал tcl).
Пришлось повозиться со скобками.
#! /usr/bin/expect -f

#################
spawn /usr/sbin/fping 192.168.0.15
while (1) {
expect {
 "unreachable" { break }
"alive" {

spawn ssh 192.168.0.15
expect "password:"
send "mypass\r"
expect "]$"

send "sudo /sbin/poweroff\r"

}

}
expect "The system is going down"
break
}

#################
spawn /usr/sbin/fping 192.168.0.16
while (1) {
expect {
 "unreachable" { break }
"alive" {

spawn ssh 192.168.0.16
expect "password:"
send "mypass\r"
expect "]$"

send "sudo /sbin/poweroff\r"

}

}
expect "The system is going down"
break
}

#################
spawn /usr/sbin/fping 192.168.0.19
while (1) {
expect {
 "unreachable" { break }
"alive" {

spawn ssh 192.168.0.19
expect "password:"
send "mypass\r"
expect "]$"

send "sudo /sbin/poweroff\r"

}

}
expect "The system is going down"
break
}
Таким образом все компы друг за другом будут выключаться, а без пинга будут игнорироваться. Теперь необязательно забивать в крон на каждом клиенте параметры выключения.

Хочу еще запускать скрипт щелчком мыши). В баш я это так делал
tty -s; if [ $? -ne 0 ]; then konsole -e "$0";  fi
Кто знает как в tcl?
« Последнее редактирование: 13.10.2012 08:16:18 от ska »

ska

  • Гость
Re: скрипт выключения
« Ответ #6 : 26.10.2012 11:40:17 »
Все-таки еще вопрос. Если запускать скрипт вручную,  все работает нормально. Но если поместить в крон, то компы не выключаются, а в почте от крона читаю такое
spawn /usr/sbin/fping 192.168.0.15
192.168.0.15 is alive
spawn ssh 192.168.0.15
Last login: Fri Oct 26 00:23:10 2012 from master.local
tset: unknown terminal type unknown
Terminal type? mypass
tset: unknown terminal type mypass
Terminal type? sudo /sbin/poweroff
tset: unknown terminal type sudo /sbin/poweroff

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 171
    • Домашняя страница
Re: скрипт выключения [решено]
« Ответ #7 : 26.10.2012 11:43:40 »
Привязывайте к терминалу (хоть через screen). cron запускает без терминала.
Андрей Черепанов (cas@)

ska

  • Гость
Re: скрипт выключения [решено]
« Ответ #8 : 29.10.2012 05:47:01 »
Привязывайте к терминалу (хоть через screen). cron запускает без терминала.
ура, спасибо. Заработало только, когда добавил флаги -m -d. Т.е. в кроне такая строчка
30 14 * * 1,3,4,6  linux screen -d -m /home/linux/my_scripts/poweroff/poweroff.sh

Оффлайн shkotovo

  • Участник
  • *
  • Сообщений: 55
  • Свобода - возможность не делать то, чего не хочешь
Re: скрипт выключения[решено]
« Ответ #9 : 02.11.2012 04:42:04 »
Спасибо за expect! Выручило при решении этой же проблемы. А так никогда бы и не узнал. Есть идиотский вопрос: .sh в конце имени файла-скрипта - это важно? Я вот не использую. Может это создать мне проблемы?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 171
    • Домашняя страница
Re: скрипт выключения[решено]
« Ответ #10 : 02.11.2012 10:55:09 »
Спасибо за expect! Выручило при решении этой же проблемы. А так никогда бы и не узнал. Есть идиотский вопрос: .sh в конце имени файла-скрипта - это важно? Я вот не использую. Может это создать мне проблемы?
Это не Windows, расширения файлов — исключительно дань традиции. Можно как угодно называть.
Андрей Черепанов (cas@)