Skrypt do pingu innych komputerów, wyłączający komputer przy

Kategorie ogólne dotyczące spraw szeroko rozumianej informatyki
styko

Skrypt do pingu innych komputerów, wyłączający komputer przy

Post autor: styko » 31 paź 2013, 10:19

Witam.

Drodzy Państwo. Mam mały problem, który może wydać się trywialny jednakże przekracza moje skromne zdolności pojmowania temat.

Mianowicie chodzi mi o skrypt wyłączający komputer, kiedy nie można spingować innej maszyny.

Sytuacja jest taka, że mamy 4 serwery - win serw 2008 R2 (na jednym 3 maszyny wirtualne co daje w sumie 7 serwerów) w serwerowni i 2 upsy. 2 serwery są bezpośrednio połączone kabelkiem do UPSA i w razie awarii prądu wyłączają się za pomocą dołączonego oprogramowania. Problem tkwi w maszynach wirtualnych i 1 z wolnostojących serwerów.

W razie awarii nie ma możliwości ich wyłączenia bo po prostu nie wiedzą, że zaraz upsy padną. Wymyśliłem sobie taką sytuację, że serwery nie podłączone do UPSów będą wysyłać ping powiedzmy co 3 minuty w kierunku dwóch podłączonych do upsa serwerów i jak nie dostaną odpowiedzi (znaczy się, że serwery wyłączyły się samoczynnie z powodu braku prądu) rozpoczną procedurę zamykania systemu.

Problem w tym, że to musi odbywać się systematycznie, gdzieś w tle, ping co 3 minuty powiedzmy.

Już parę razy próbowałem z pomocą różnych użytkowników to napisać jednakże za każdym razem coś nie działa.

Mój pierwszy kod jakiego użyłem to

Kod: Zaznacz cały

#!/bin/bash
BAR=0
until [ $BAR -eq 4 ]; do
    sleep 3m
    FOO1=`ping -c 1 192.168.100.8 | grep from | wc -l`
    FOO2=`ping -c 1 192.168.100.9 | grep from | wc -l`
    FOO=$[FOO1 + FOO2]
    if [ $FOO -eq 0 ]; then
        BAR=$[BAR + 1]
    else
        BAR=0
    fi
done
shutdown -h now
Następnie pierwsza propozycja jednego z użytkowników

Kod: Zaznacz cały

#!/bin/bash

a=1
while [ $a -lt "255" ]; do
    ping -i 0.2 -W 1 -c 2 192.168.0.$a | grep "bytes from" | awk '{print $4 " up"}' | sort | uniq;
    let x++;
done
i druga

Kod: Zaznacz cały

#!/bin/bash

PC1="192.168.1.10"
PC2="192.168.1.11"
N=3

n=0
while true; do
  ! ping -n -q -c 1 $PC1 && \
  ! ping -n -q -c 1 $PC2 && \
  n=$(expr $n + 1) || n=0
  [ $n -ge $N ] && shutdown -h now
  sleep 300
done
Czy możecie stwierdzić co tutaj jest źle, że nie działa tak jak powinno???Odpalając plik .bat (w każdym z tych kodów) po prostu przleatuje mi czarny ekran, znika i nic się kompletnie nie dzieje. Nie wiem czy w tle to działa, i raczej nie bo pingowane są IP, które nie mają prawa na ping odpowiedzieć, co powinno od razu zamykać system.

Wdzięczny byłby bardzo za podpowiedź co tu zrobić i zmienić żeby zadziałało.

Awatar użytkownika
Administrator
Site Admin
Posty: 34
Rejestracja: 28 lis 2006, 01:11

Re: Skrypt do pingu innych komputerów, wyłączający komputer

Post autor: Administrator » 4 lis 2013, 10:44

Obstawiam, że sprawa wydaje się prosta - próbujesz uruchomić skrypty bash'a, napisane dla środowiska unix, na komputerze z systemem windows (zakładam po opisie i użyciu plików .bat). Widzę trzy opcje, albo zainstalujesz na którymś z serwerów linuksa na przykład (co będzie miało też inne plusy), albo rozejrzysz się czy istnieje jakaś wersja basha na windowsa. Trzecia, raczej mało realna,to przerobienie skryptów pod dos'a.
PS. Mam u siebie systemy działające jako wirtualne maszyny pod ubuntu, jeżeli zamykam system gospodarza, do maszyny wirtualne dostają informacje o zamknięciu i same się wyłączają (jeżeli nic tego nie blokuje). Może da się też tak Twoje środowisko skonfigurować?

styko

Re: Skrypt do pingu innych komputerów, wyłączający komputer

Post autor: styko » 6 lis 2013, 12:59

Kurcze faktycznie, żem nie uwidział, że to linuksowe skrypty. Ta fraza #bash mnie zastanawiała.

To teraz pytanie, czy w ogóle na serwerze windowsowym jest możliwość stworzenia skryptu co w tle będzie sobie działał na powyższych zasadach, pingował inne komputery i jak nie wróci ping to wyłącza automatycznie maszyne??

styko

Re: Skrypt do pingu innych komputerów, wyłączający komputer

Post autor: styko » 6 lis 2013, 13:59

Przepraszam za spam ale wpadłem jeszcze na jeden pomysł, nie tak pokręcony jak wcześniejsze. M.in. za pomocą Sheulde Task tj. Harmonogramu zadań ustawię wykonywanie skryptu powiedzmy co 5 minut. Z tym, że teraz pytanie o stricte windowsowy scrypt batch.


Chodzi mi, żeby skrypt spingował 2 adresy ip np. 192.168.1.100,192.168.1.101 powiedzmy 3 razy i jeśli nie dostanie odpowiedzi z żadnego z tych adresów wyłączył komputer.


Gdzieś wynalazłem w sieci coś takiego...czy to coś ma rację bytu???

Kod: Zaznacz cały

:start1
start b.bat 192.168.1.100
start b.bat 192.168.1.101
:test1
if exist 192.168.1.100 goto test2
goto test1
:test2
if exist 192.168.1.101 goto test3
goto test2
:test3
if no exist 192.168.1.100 goto test4
goto test3
:test4
if no exist 192.168.1.101 shutdown -a
goto start1
Z góry dzięki za nakierowanie mnie na tenże problem.

ODPOWIEDZ