1 (edytowany przez macarooni 2019-04-29 13:18:56)

Temat: Skrypt do automatycznego restartu przy braku internetu.

Aktualnie używam tego:
#!/bin/sh
sleep 300
if ! ping -q -c 5 -W 10 onet.pl > /dev/null; then
    (reboot) &
fi

Ale mam pewne wątpliwości co do tego czy to na pewno niezawodny sposób.

Używam sleep 300, aby uniknąć bootloopów, może powinienem zamiast tego bazować na wyniku uptime, albo zapisywać podczas restartu odległość od epoki linuksa $EPOCHSECONDS?

Czy pingowanie po domenie to dobry pomysł? Co jeśli serwery DNS dostawcy internetu się położą (wtedy po prostu będę miał restart co 5 minut aż wstaną czy zero restartów)? Czy onet ma jakiś IP, którego można do tego użyć i być pewnym, że zawsze będzie aktywny? Poza tym, nie wiem czy onet.pl jest odpowiednim wyborem, też może mieć przecież downtime (czy jeśli onet będzie leżał to mam restart co 5 minut?). Nie chcę pingować google, czy są jakieś hosty do tego przeznaczone z uptime 100%? Może pingować np. stronę mojego dostawcy do internetu?

To dla serwera do którego nie ma fizycznego dostępu i nie ma ssh, więc jak internet się położy (bez reboota sam nie wstanie), będzie bootloop itp. to będzie wtedy kompletna katastrofa, jest to bardzo ważne, żeby to niezawodnie działało.

2

Odp: Skrypt do automatycznego restartu przy braku internetu.

Jak dns nie działa to znaczy że tez nie ma internetu. Więc tak, dobry, tym bardziej że prawdopodobieństwo że padnie serwis typu onet czy google jest naprawdę małe. To że dostawca się pinguje nie znaczy jest internet - sprawdzone smile

W/w możesz trochę przerobić - zamiast rebotować natychmiast to poczekasz zrób następne pingi w ciągu np. 3 min i jak faktycznie nie było odpowiedzi przez te 3min to dopiero restartuj.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Skrypt do automatycznego restartu przy braku internetu.

Jest już taki skrypt/pakiet. Nawet dodatek do luci. Nazywa się watchcat

4 (edytowany przez macarooni 2019-05-01 19:08:13)

Odp: Skrypt do automatycznego restartu przy braku internetu.

kofec, jak ten watchcat działa? Nie za bardzo ogarniam basha. Jak rozumiem można go też używać bez luci. Czy on wspiera tylko jeden host dla pingowania? Widzę, że ma jakieś logowanie, jak przeczytać te logi? Czy czeka po starcie w celu uniknięcia bootloopa (podejrzewam, że czeka tyle na ile ustawiony jest "pingperiod", co by było słabe)?

https://github.com/openwrt/packages/blo … atchcat.sh

5 (edytowany przez khain 2019-05-02 07:08:00)

Odp: Skrypt do automatycznego restartu przy braku internetu.

Skrypt sprawdza czy pierwszym parametrem jest "always" jeśli tak to robi reboot  po czasie zadeklarowanym jako drugi parametr. Trzeci parametr to czas, po którym ma zrobić "force reboot", gdyby reboot się nie wykonał.
Jeśli pierwszym parametrem nie jest always to podajesz jako parametry:
1 -> jakiś parametr (bez znaczenia), ale nie always
2- > czas bez Internetu po jakim ma być zrobiony reboot
3 -> czas po jakim ma wykonać "force reboot", gdyby reboot się nie wykonał
4 -> nazwa hosta/adres IP jaki ma być pingowany - możesz podać kilka (całość parametru w podwójnym lub pojedynczym cudzysłowiu), ale jeśli jeden z nich odpowie na ping to skrypt uzna, że połączenie z Internetem działa.
5 -> co jaki czas ma być wykonany ping

Skrypt loguje do sysloga gdy wykryje, że ping na hosta się nie powiódł, więc aby wyszukać te logi wpisz

logread |grep watchcat

ale po reboocie syslog jest czyszczony.

TP-Link TL-WDR3600 v1.5 -  OpenWrt Chaos Calmer 15.05.1 with Luci +Microsoft LifeCam VX-3000
RaspberryPi 2 - OMV Stone Burner 2.0.15 +Creative SB Play +Medion OR24V +DVB-T Media-Tech MT4163  +MP00202AC +3xDS18B20 +HIH-4000-002 +MPXHZ6115A +Samsung SPF-85H +D-Link DUB-H7