LINUX.ORG.RU

Wake-up сервера при обращении к нему.

 , ,


0

1

Итак что есть:
Сервак, который используется 1-2 раза в сутки, и wl500.
Ради пары раз в сутки держать сервак в 24/7 нелогично. постоянно включать-выключать сервак тоже мало приятного (хочется упрятать его или на балкон или на антресоль, то есть в недоступное место)
Что удалось придумать:
На wl500 2 скрипта
/opt/sbin/watchserv (поднимаем виртуальный интерфейс с ip сервера(сервер в это время выключен) и отслеживаем обращения к нему. по факту обращения пишем событие в лог-файл, одновременно с этим наблюдаем за логом и делаем системный вызов второго скрипта, при появлении ключевой фразы)

#/bin/sh
iptables -t nat -I PREROUTING  -d 192.168.1.253 -j LOG --log-prefix="TRIGGER ME NOW !!!"
ifconfig eth0:0 192.168.1.100 up
tail -0 -f /tmp/syslog.log| awk '/TRIGGER ME NOW !!!/ {system("/opt/sbin/wakeserv")}'

/opt/sbin/wakeserv (в этом скрипте wakeonlan'им сервер, убиваем запущенные в предыдущем скрипте, гасим правило файервола и интерфейс)

#/bin/sh
ether-wake 00:01:02:03:04:05
killall tail
killall awk
iptables -t nat -D PREROUTING --destination 192.168.1.253 -j LOG --log-prefix="TRIGGER ME NOW !!!"
ifconfig eth0:0 down

Что нужно сделать:
1.Сообразить хитрый скрипт на сервер который стартует при его выключении (кстати как отличить выключение от ребута?) отсылает сообщение на роутер (предположительно средствами nc 192.168.1.1 12345 посылаем ключевую фразу «workforme») получает подтверждение и после этого продолжает процесс отключения питания.
2. Еще один хитрый скрипт для выключения питания при бездействии (в действии пока mpd, httpd, samba) 30 мин.
3. На роутере: обработку полученной через nc -l -p 12345 ключевой фразы, ответ на сервер о получении, дальше пинг сервера (для подтверждения отключения питания), при пропаже пингов - старт первого скрипта.
*. [не обязательно] Хорошо бы в имеющихся на роутере скриптах перехватывать и сохранять все пакеты, предназначавшиеся роутеру и повторно отправлять их после его пробуждения. То есть, с учетом загрузки сервера за 30-40 сек. мы получаем (с точки зрения клиента) лаг на время загрузки роутера. что не потребует повторного запроса.

Буду благодарен за умные мысли, подсказки в путях решения, и в особенности за готовые решения :)

Как это должно выглядеть: сервер выключен, а мне захотелось послушать mpd. я запускаю (допустим) DroidMPD, он пытается подключиться к серверу. Сервер от этого просыпается и через 30сек дает ответ клиенту. Я получаю музыку.


Хорошо бы в имеющихся на роутере скриптах перехватывать и сохранять все пакеты, предназначавшиеся роутеру и повторно отправлять их после его пробуждения

Ненужно (tm). Твой клиент идет к серверу по TCP, а это значит что он делает 5 повторных попыток в течение 1 минуты с интервалом 10 секунд. То есть всё что тебе надо, это среагировать на первый пакет и включить сервер.

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

интересно.

Спасибо. Но не факт, тот же mpdroid выдает ошибку подключения секунд через 15 после старта. Если удасться реализовать остальные пункты будет шанс проверить (возможно, роутер гасит интерфейс слишком рано. И клинт отваливается по недоступности хоста). Помогите хоть с ключевыми фразами, что гуглить... Любые мысли по каждому пункту...

Tohin ()
Ответ на: интересно. от Tohin

есть мысль

Мне показалось, что все пункты можно реализовать на связке netcat и awk...

Но оформить это в виде решения пока не могу... Пошел читать...

Tohin ()
Ответ на: есть мысль от Tohin

Скучно тут у вас...

Уперся в проблемус запуском скрипта awk через netcat -e. Аналогичные проблемы тут: https://forum.openwrt.org/viewtopic.php?id=29124 Описания решения не нашел (или не понял... с английским плохо..)

Tohin ()
Ответ на: интересно. от Tohin

Re: интересно.

Не нужен вирт. интерфейс. Закрой icmp, чтобы клиент не получил «port unreachable». iptables по первому пакету (SYN) запишет LOG --> сработает твой триггер, сервер пробудится и обслужит клиента.

Отключение от ребута не надо отделать в таком случае, т.к. никаких игр с вирт.интерфейсом нет.

anonymous ()
Ответ на: Re: интересно. от anonymous

Ничего не понимаю. (с) Следствие ведут колобки

Как закрыть? На что это может повлиять?

Пробую сделать скрипт awk_script:

#!/usr/bin/awk -f
/hello/ {print "ehlo"}
и перенаправить вывод netcat в этот скрипт:
netcat -lvp 12345 -e 'awk -f /opt/sbin/servawk' со стороны клиента получаю:
nc 192.168.1.1 12345
awk_script: applet not found
Пробовал поставить gawk, симптомы те же самые...

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