Portál AbcLinuxu, 26. dubna 2024 17:53


Dotaz: Skript na vypnutie PC v pripade sietoveho problemu

11.8.2019 21:37 nobody
Skript na vypnutie PC v pripade sietoveho problemu
Přečteno: 339×
Odpovědět | Admin
Zdravim, potrebujem bash skript ktory NEUSTALE checkuje pingom najblizsie sietove zariadenie/zariadenia (router, nejake DNS a pod radsej viac) a v priade jeho/ich vypadku na viac ako 5 minut vypne komp. Dik.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 11.8.2019 22:44 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dej si do cronu spouštění ping server 2>/dev/null || shutdown now -h každých 5 minut.
Hello world ! Segmentation fault (core dumped)
11.8.2019 23:06 nobody
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
to ide raz za 5 minut, ja potrebujem ale zacat ratat 5 minut od posledneho neuspesneho pingu, v pripade ze sa ping obnovi cas sa resetuje a PC sa nevypina a ide sa odznova... :-/
11.8.2019 23:15 Radovan
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
Tak si ten výsledek pingu někam zapisuj jako {0, 1} a vypínej až při dvou neúspěšných pokusech za sebou.

Nebo ho po neúspěšném pingu vypni shutdown -h +5 a můžeš to zrušit shutdown -c (asi by to chtělo mít trochu časovou rezervu)
k3dAR avatar 11.8.2019 23:26 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
to by vypllo v pripade ze by behem 5m byli poze 2 vterinove vypadky v 0:00 a v 0:05 ;-)
mam pocit ze to same nebo aspon se stejnym resenim tu nedavno bylo, psal sem tam kratkej skript co to resil, ale nevzpominam si na tema/keyword podle ktereho bych to dohledal, nicmene jde o to ze v 5minutove smycce se bude provadet ping kazdou vterinu a kdyz bude vsechna odezva bad, tak se provede shutdown, kdyz bude jedina ok, tak se pokracuje dal, tohle reseni akorat muze v pripade ze ok bude v 0:00:00 a zbytek 5m-1s bad, ze to bude cekat dalsich 5m zda bude stale bad... takze pripadne ten 5m vzdy resetovat od prvniho ok v prubehu tech 5m
porad nemam telo, ale uz mam hlavu... nobody
k3dAR avatar 12.8.2019 01:08 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
tak sem to nasel ale slo o jinou situaci, takze pro tazatelovu, i kdyz teda jen pro jednu IP:
- dokud se nedosahne hodnoty nastavene v count_time tak pinguje
- kdyz je ping ok, pousti check_ping funcni znovu takze se pocita zas od "0"
- k nastavenemu count_time dojde v cyklu jen kdyz je stale ping spatnej
- pokud se nastavi sleep_time na vice nez 1, cyklus bezi stejnou dobu pouze se mezi kontrolama dele ceka
- ping_timeout je cas v s kdy ping ceka na vysledek, kdyz by se nastavil na vice nez 1s tak count_time nebude odpovidat vterinam ale nasobku ping_timeout, to se mi uz nechtelo resit aby i s s timeout 10s bylo count_time 300 stale 5minut :-)
- kdyz je nastaveno debug=yes tak se zobrazuje informace pri spusteni cyklu a v pripade nedostupne IP pocet/z_kolika nez by to udelalo shutdown kterej to realne neprovede jen (v tomto ladicim rezimu) zobrazi "JenEcho: shutdown now", kdyz neni nastaven debug tak to nevypisuje nic a provede to realne shutdown pokud souvisle nedostupna IP bude nastavenej count_time (300 je v s tedy 5m)
- i kdyz by cyklus mel skoncit pouze v pripade nedostupne ip po tu nastavenou dobu, ve while to radeji kontroluju (posledni stav) a pokud by byl ok testovaci cyklus se opet zpusti znovu...
#!/bin/bash

count_time="300"
sleep_time="1"
check_ip="192.168.0.1"
ping_timeout="1"

debug="yes"

if_debug(){
    [[ ${debug} = "yes" ]] && echo "${1}"
}

check_ping(){
    if_debug "Run check_ping"
    count=0
    until [[ ${count} -gt ${count_time} ]]; do
        ping -c1 -W${ping_timeout} ${check_ip} &>/dev/null && ping_state="ok" || ping_state="bad"
        count="$((${count} + ${sleep_time}))"
        sleep ${sleep_time}
        [[ ${ping_state} = "ok" ]] && check_ping || if_debug "Ping BAD [${count}/${count_time}] before shutdown..."
    done
}

while :; do
    check_ping
    [[ ${ping_state} = "bad" ]] && ([[ ${debug} = "yes" ]] && echo "JenEcho: shutdown now" || pustit_shutdown_now)
done
porad nemam telo, ale uz mam hlavu... nobody
k3dAR avatar 12.8.2019 01:10 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
misto "pustit_shutdown_now" je tam samozrejme potreba mit
shutdown now
zapomel sem to prepsat kdyz tohle mel abych si nevypnul nb pri vyzkouseni skriptu zda "funguje" i bez debug yes :-)
porad nemam telo, ale uz mam hlavu... nobody
Jendа avatar 12.8.2019 05:52 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
No to je ale komplikované…
touch /tmp/alive
while sleep 30; do
  timeout 20 ping -c 3 router && touch /tmp/alive
  [ `find /tmp/alive -mmin -5 | wc -l` -eq 0 ] && poweroff
done
(netestováno)
12.8.2019 07:29 nobody
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
To vyzera pouzitelne. skusim
11.8.2019 23:18 j
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
A nechtel by ses pochlubit tim, nac neco takovyho vymejslis? Vypada to totiz, ze se snazis zprovoznit hranaty kolo.

Jinak doporucuju ke studiju sekundovej guugl https://linux.die.net/man/8/shutdown, ono se to totiz da nastavit trebas na 5 minut, a v prubehu odpoctu to stopnout.

To ze neco neodpovi na ping pak jeste vubec neznamena, ze nefunguje sit.
k3dAR avatar 11.8.2019 23:28 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
neni duvod nastavit predem shutdown, kdyz stejne pak musi zjistovat stav, takze ten shutdown se muze zavolat az v pripade vyhodnoceni s now...
nicmene take by me zajimalo proc to tazatel potrebuje, chapal bych treba ze misto shutdown pouzije reboot pro teoreticke zajisteni ze se neco kouslo a nechtel by zjistovat co konkretne aby restartoval jen nejakou sluzbu...
porad nemam telo, ale uz mam hlavu... nobody
11.8.2019 23:35 Karol
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
mozno ma UPSku bez komunikacie s usb kompu a vie ze vydrzi 5 minut minimalne a router je mimo UPS. Alebo chce aby sa pocitac vypol ked po neho pride policia a zoberie ho v zapnutom stave :-)
11.8.2019 23:39 PetebLazar
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
Praktické využítí může být například v tom, že při odcizení stacionárního běžícího notebooku na vzdálené destinaci se tento po relativně krátké době sám vypne a zloděj(útočník) bude muset hackovat vypnutý počítačj (předpokládejme se zašifrovanou storage). To by měl být těžší úkol než útok na počítač s běžícím OS.
k3dAR avatar 12.8.2019 00:13 k3dAR | skóre: 62
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
+ @Karol: jasne to dava smysl :-)
porad nemam telo, ale uz mam hlavu... nobody
Josef Kufner avatar 12.8.2019 01:18 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Skript na vypnutie PC v pripade sietoveho problemu
ping server -i 10 -c 1 -w 300 2>/dev/null || shutdown now -h
Toto bude po dobu 300 sekund posílat každých 10 sekund ping, dokud se nějaký nevrátí. Pokud žádný nepřijde, tak to vypne server.

Pokud to chceš kontinuálně sledovat, dej to do cyklu while sleep 10; do ping ... ; done a ten dej do service souboru (pokud mášsystemd), ať se to spustí jako běžná služba.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.