Pytanie”
Zdalne zawieszanie się Rpi od czasu do czasu. Jak ich obudzić?
Odpowiedź
Zaktualizuj 2019jul27hkt1406
Niedawno zaktualizowałem mój Rpi3B + stretch do Rpi4B buster i ponownie postępowałem zgodnie z samouczkiem @ berto, aby ustawić zegar watch dog. Stwierdziłem, że wszystko działa tak płynnie jak wcześniej. Innymi słowy, podczas aktualizacji do Rpi4 nie trzeba wprowadzać żadnych zmian w samouczku @ berto.
Ostatnim razem nie wiedziałem nic o zegarku watchdog. Więc wygooglowanie wszystkiego zajęło mi ponad 3 godziny, żeby zrozumieć wszystko na wylot (prawie na lewą stronę). Tym razem wiem, co się dzieje i wszystkie sztuczki linuxowe, więc ukończenie samouczka @ berto zajęło mi tylko kilka minut.
Aktualizacje 2019jun18
Po wielu przemyśleniach doszedłem do wniosku, że moja odpowiedź dobiega końca. Doszedłem do wniosku, że samouczek strażnika @ berto i sugestia eksperymentu są dobre, a jego odpowiedź jest prawdziwą odpowiedzią na pytanie OP.
Z powodzeniem przeprowadziłem sugerowany przez niego eksperyment, zweryfikowałem wyniki za pomocą programu forkbomb i po wielu googlach i czytaniu przez ponad 10 godzin, wydaje mi się, że w końcu dogłębnie zrozumiałem ideę watchdog timer.
Wcześniej błędnie pomyślałem, że nadal muszę się nauczyć, jak ustawić timer na 10 sekund lub więcej. Ale jak mówi @berto, wystarczy ustawić 10 sekund. Wyczytałem też, że mogę ustawić timer nawet na 16 sekund, a domyślny watchdog linux to nawet jedna minuta. Ale to nie jest krytyczne.
Usunąłem wszystkie rozwlekłe notatki do czytania w załącznikach, aby skrócić odpowiedź. Sugerowałbym początkującym, aby nie próbowali zrozumieć wszystkich szczegółów watchdoga, nie wspominając o znacznie bardziej skomplikowanym demonie SystemD, ponieważ nasze życie jest krótkie, a te sprawy systemowe są zbyt skomplikowane dla amatorów.
Ja chciałbym dodać dwa punkty na końcu mojej odpowiedzi.
(1) Jest wiele powodów, dla których Rpi zawiesza się w ciągu kilku dni (ale zwykle nie miesięcy). Często nie jest to wina aplikacji, ale to, że sterowniki lub funkcje biblioteczne tworzą zbyt dużo śmieci, np. gniazda utworzone, używane, ale niewłaściwie usuwane. Jeśli to aplikacja sama robi śmieci, program może „zbierać śmieci” i rozwiązać problem. Ale trudno jest usunąć gniazda śmieci, które nie są generowane przez program. Dlatego przydatny jest tutaj licznik czasu watchdog.
(2) Inne sposoby uniknięcia zbytniego zużywania zasobów obejmują ponowne uruchamianie od czasu do czasu za pomocą oprogramowania lub sprzętu. Myślę, że ponowne uruchamianie każdego ranka, a także użycie przełączanego oprogramowania do resetowania systemu, dodaje kolejną warstwę ochrony. A używanie tylko jednego Rpi nie jest zbyt bezpieczne. Użycie dwóch Rpi jako strażników dla siebie nawzajem (np. Użycie URT do przekazywania wiadomości) dodaje jeszcze jedną warstwę ochrony. Inną metodą, której nie zbadałem, jest użycie gniazd WiFi ESP8266. Mam nadzieję, że spróbuję później.
To koniec mojej odpowiedzi. Pozdrawiam.
Aktualizacje z czerwca 2019 roku
Więc wypróbowałem widelec-bombę. System uruchomił się ponownie po wykonaniu programu, w ciągu około 15 sekund .
Aktualizacje z czerwca 2019 r.
Uważam, że program Fork Bomb w @ berto jest nieco przerażający dla początkujących. Więc uczę się Basha, żeby dowiedzieć się, co robi ta bomba widelca. Zasadniczo jest to po prostu funkcja o nazwie „:”, która jest zdefiniowana jako funkcja wywołująca samą siebie dwa razy, a więc rozwidlająca się w nieskończoność, tak szybko jak króliki rosną wykładniczo, zużywając wszystkie zasoby i zawieszając Linuksa.
Znalazłem również następującą interesującą wersję forkbomb używającą symboli Unicode:
() {| &};
Aktualizacje z 14 czerwca 2019 r.
@thesnow sugeruje bardzo ładne podejście warstwowe przy użyciu inteligentnej wtyczki. Myślę, że inteligentna wtyczka lub inteligentne rzeczy IoT są drogą do zrobienia. Jednak nie jestem zbyt inteligentnym nowicjuszem w inteligentnych rzeczach, chociaż bardzo chcę się uczyć. Więc kupię inteligentną wtyczkę, poszukam i poprawię odpowiedź. Na razie dodałem kilka powiązanych zasobów edukacyjnych w sekcji referencyjnej poniżej.
Sugestia @ berto dotycząca używania sprzętowego licznika czasu Rpi również jest bardzo dobra. Nie grałem wcześniej w żadne rzeczy związane z zegarkiem. Więc teraz spróbuję. Instrukcje @ berto są bardzo szczegółowe, ale nadal trochę trudne dla mnie, ponieważ nie bardzo dobrze znam znaczenie poleceń „grep” i „dmseg”. Poszukałem więc w Google i zrobiłem kilka uwag do czytania w załącznikach poniżej. Następnie postąpiłem zgodnie z sugestią @ berto i trochę się starałem, aby ukończyć część 1. Nie mam jeszcze restartu, ponieważ muszę zrobić sobie przerwę, aby wszystko przetrawić. W każdym razie, oto zrzut ekranu.
Ponownie uruchomiłem i otrzymałem następujący dmesg:
Myślę, że idę za szybko i teraz muszę zrobić sobie przerwę, aby najpierw przestudiować więcej rzeczy o Linuksie, takich jak systemd, zanim wrócę, aby kontynuować test na watchdog.
/ aby kontynuować, ...
Odpowiedź
Mam ten sam problem. Buduję ogród na dachu z kilkoma urządzeniami Rpi, z których każdy łączy się z różnymi czujnikami bezprzewodowymi (BlueTooth, Wifi), przekaźnikami i solenoidami. W pobliżu znajdują się dwa ogromne silniki sterujące dużymi zbiornikami na wodę i windami. Silniki generują EMI i od czasu do czasu zamrażają pobliskie elementy elektroniczne.
Planuję używać przełączanych programowo zasilaczy (zasilaczy) do wyłączania / włączania zamrożonych RPI i innych urządzeń (urządzenia Bluetooth najczęściej się zawieszają. BlueTooth i inne małe urządzenia nie mają żadnego polecenia resetowania oprogramowania ani resetowania sprzętu pin, więc wyłączenie / włączenie ich 5 V Vcc jest szybkie i brudne, ale nadal bezpieczne). Krótko mówiąc, The Rpi regularnie obserwują siebie nawzajem i swoje urządzenia oraz POR (Power On Reset) każdego faceta, który zasnął.
Oczywiście mogę również użyć pinu GPIO do wyzwolenia sprzętu Rpi na pinie resetowania płyty. Ale jestem zbyt leniwy, aby wykonać dodatkowe okablowanie i zbyt biednym hobbystą, aby pozwolić sobie na profesjonalne / przemysłowe urządzenia systemowe non-stop, takie jak podwójny zegar SwitchDoc Labs Dual WatchDog Timer (patrz odniesienie poniżej)
Modyfikuję zwykły DC- Zasilacze DC (12 V do 5 V), dzięki czemu dowolne piny GPIO Rpi lub MCP23x17 mogą włączać / wyłączać układ regulatora napięcia LM2956 / LM2947 zasilacza. (LM2941 może być używany do przełączników prądowych 1A, LM2596 do zasilaczy 5V 3A. Styk włączania / wyłączania jest również podłączony do przycisku, do ręcznego testowania włączania / wyłączania zasilania.)
Właściwie każdy z moich 7 Rpi3B + jest podłączony do taniego modułu zegara czasu rzeczywistego DS3231, który ma pin przerwania sprzętowego do resetowania PSU, Rpi lub innych urządzeń.
O ile to możliwe i praktyczne, łączę razem styki resetujące wszystkich urządzeń (usuwając niektóre rezystory podciągające, aby nie przeciążać pinów GPIO).
Teraz zewnętrzny DS3231 RTC budzi wszystkich rano i wyłącza światła o północy, więc wszyscy kładą się spać.
Odniesienia”
1. Oparte na LM2596 / LM2941 programowe resetowalne zasilacze / przełączniki prądowe - dyskusja na temat Rpi StkEx
Dyskusja o sprzęcie strażnika Rpi
SwitchDoc Labs Dual WatchDog Timer
ATXRaspi R3 - LowPowerLab 14,95 USD
ESP8266 z możliwością hakowania wewnątrz inteligentnej wtyczki Chcesz bawić się ESP8266 bez martwienia się o sprzęt? - Mat 2017aug06
Inżynieria odwrotna 101 ekosystemu Xiaomi IoT HITCON Community 2018 - Dennis Giese
Gniazdo WiFi Xiaomi + aplikacja MiHome 21,307 wyświetleń
espHome [ESP8266 / ESP32]
Inteligentna wtyczka AliExpress WiFi
Urządzenie inteligentne -Wikipedia
Mechanizm otwierania drzwi garażowych WiFi za pomocą ESP8266 - Ray Wang 2016 może 13 56335 wyświetleń
Załączniki
Dodatek A - uwagi dotyczące czytania zegarka WatchDog
Watchdog timer - Wikipedia
Linux Strona WatchDog Man
Linux Watchdog - testy ogólne
Dodatek B - polecenia Linuksa grep i dmesg czytające notatki
Dodatek C - odniesienia do systemd
Systemd Menedżer systemu i usług - FreeDeskTop
systemd - Wikipedia
Dodatek D - Odniesienia do bomb w widelcu
Fork (wywołanie systemowe) Wikipedia
Dodatek E - Bash Learning Notes