assaron 06.09.2009 19:43

Tips & tricksОжидание появления хоста в сети.

Иногда какой-нибудь комп в локальной сети выключен, а на нем есть

что-нибудь интересное. Или хочется написать пост на WeLinux, а

сервер лежит.

Возникает задача дождаться, пока компьютер появится в сети.Ее

можно решить простым скриптом:
 1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

until ping -c 1 -W 1 $1 >/dev/null 2>&1

do

sleep 1

done

echo $1 is on-line

$2



Первым параметром принимается имя хоста, вторым (необязательным) —

команда, выполняемая после появления компьютера.


Тэги: bash script консоль
+ 3 -
Похожие Поделиться

chemikadze 06.09.2009 20:10 #
Разъясните синтаксис вычисления значение untill-выражения неразумному.
assaron 06.09.2009 21:22 #
ping возвращает 0, если пакет дошел, и не 0 — если нет
chemikadze 06.09.2009 21:26 #
Это я понял. Просто перенаправления больно хитро написаны =)
derfenix 04.02.2010 13:27 #
Весь вывод отправляется в null (>/dev/null), но сообщения об ошибках - на стандартный ввод (2>$1). благодаря этому и получается 1 только если пакет не дошёл.
Astramak 06.09.2009 20:37 #
Давайте все мониторить так, может когда нибудь сайт и поднимется :))
chemikadze 06.09.2009 21:10 #
Угу, помню как я в ЛКШ хлипенький комп пингами DDoSил... Золотые были времена =)
assaron 06.09.2009 21:18 #
ddos'а не может быть, т.к. до адресата доходит только один пакет
chemikadze 06.09.2009 21:21 #
а если 3 компа и 10-15 пингов одновременно от каждого?
assaron 06.09.2009 22:40 #
я тебя не понимаю
ты про ддос пингом вообще, или конкретно от данного скрипта?
chemikadze 06.09.2009 22:45 #
Вообще =)
assaron 06.09.2009 22:47 #
ааа....
но все равно 3 компа и 15 пингов в секунду, имхо, не положит даже пень 200
assaron 06.09.2009 22:47 #
но в лкш не был, может у вас там еще старее компы? :)
chemikadze 07.09.2009 00:07 #
Тогда были древние как черти что, сейчас не знаю. Ложить насмерть не ложило, но атакованная машина тааак тормозила...
werru 06.09.2009 21:10 #
+1 к chemikadze
я вот этого не понимаю 2>&1
assaron 06.09.2009 21:19 #
это я выпендрился немножко :)
это перенаправление stderr в stdout, чтоб не писать >/dev/null 2>/dev/null
chemikadze 06.09.2009 21:22 #
Так понятнее =)
xT 06.09.2009 21:26 #
тут был мой коммент, но я его удалил :) напишу снова

>/dev/null 2>&1

означает, что мы перенаправляем стандартный поток вывода(1) в небытие, а поток ошибок(2), туда же куда и поток вывода
менять местами нельзя, потому что разбор параметров идёт слева направо
Axell 08.09.2009 10:21 #
А еще для КДЕшников можно добавить фичу (точно не могу проверить, с работы пишу, нет под рукой КДЕ, но как-то так это работает):

#!/bin/bash
until ping -c 1 -W 1 $1 >/dev/null 2>&1
do
sleep 1
done
kdialog --passivepopup "$1 is on-line" --title "Host is online" 5
$2


Получим красивую всплывающую подсказку =)


xT 08.09.2009 10:41 #
а для гномов - libnotify и notify-send
mrded 04.02.2010 05:05 #
а как без цикла пингонуть и вывести "$1 is on-line" в случае удачи?
чето у меня не получается никак, наверно надо лечь по спать)
assaron 04.02.2010 12:54 #
#!/bin/sh
if ping -c 1 -W 1 $1 >/dev/null 2>&1
then
echo $1 is online
else
echo $1 is offline
fi