Pytanie:
Rpi zawiesza się od czasu do czasu, jak to naprawić za pomocą watchdoga?
Jurudocs
2019-06-14 12:43:34 UTC
view on stackexchange narkive permalink

Buduję system z raspberry pi znajdującym się w bardzo odległym miejscu połączonym z Internetem za pomocą klucza internetowego. Jak dotąd testy są obiecujące, ale pi zawiesza się co jakiś czas i nie mogę już połączyć się z pi. Ponieważ nie chcę jechać przez 2 godziny za każdym razem, gdy zawiesza się, chcę zbudować system nadmiarowy, który sprawdza inny system.
Najgorszym przypadkiem będzie odcięcie zasilania w zamrożonym systemie w celu ponownego uruchomienia. Powinien to zrobić działający pi.

Teraz pytanie jako totalny noob, jeśli chodzi o budowanie elektroniki.

Sprawdziłem ATXRaspi R3, ale nie jestem pewien, jak „cyfrowo” odpalić 6-sekundową prasę na tym kontrolerze mocy, aby odciąć zasilanie przez inne pi ...

Jaki byłby najłatwiejszy sposób na odcięcie zasilania przez inne pi? Wszelkie wskazówki są mile widziane.

Nie jestem pewien, czy ktoś zaprojektuje dla Ciebie ten obwód. Ale jeszcze jedna rzecz do rozważenia: cokolwiek powoduje zamrożenie pierwszego Pi, może mieć wspólny tryb awarii dla drugiego Pi. Na przykład, jeśli zamarza z powodu wahań mocy, możesz otrzymać dwa zamrożone Pis zamiast niezależnej nadmiarowości, której chcesz. Może warto spróbować zrozumieć, dlaczego pierwsze Pi zawiesza się jako pierwsze.
Jak szybko potrzebujesz pi, aby wrócić do trybu online? Prosty licznik czasu świątecznego może włączać zasilanie co X godzin, o ile nie masz nic przeciwko czekaniu na interwał resetowania, aby ponownie włączyć go do trybu online.
@Jurudocs, Postępowałem zgodnie z tutorialem # berto watchdog timera i wszystko było w porządku. Nie do końca rozumiem, co robi watchdog, ale jestem w 90% pewien, że metoda timera watchdog powinna rozwiązać twój problem, znacznie bardziej przejrzysta w stosunku do proponowanego przeze mnie rozwiązania sprzętowego.
Pięć odpowiedzi:
#1
+7
berto
2019-06-15 08:09:28 UTC
view on stackexchange narkive permalink

Zanim przejdziesz do dodatkowego sprzętu, przeczytaj, co nazywa się „zegarem nadzorującym”. Raspberry Pi ma wbudowany sprzętowy watchdog, który będzie go wyłączał, jeśli chip nie zostanie odświeżony w określonym przedziale czasu.

Skonfigurowałem watchdog na Raspberry Pi 3 i nowszej wersji Raspbian z bardzo małą konfiguracją. Pierwszą rzeczą do sprawdzenia jest to, czy monitor sprzętowy jest dostępny (sprawdziłem swój system i wygląda na to, że wersja Raspbian, którą zainstalowałem, kompiluje obsługę watchdoga bezpośrednio w jądrze; nie ma potrzeby ładowania modułu jądra):

  pi @ unicornpi: ~ $ ls -al / dev / watchdog * crw ------- 1 root root 10, 130 3 listopada 2016 / dev / watchdogcrw ------- 1 root root 252, 0 3 listopada 2016 r. / Dev / watchdog0  

Jeśli widzisz / dev / watchdog , wszystko gotowe. Wszystko, co musisz zrobić, to skonfigurować funkcję watchdog wbudowaną w Systemd.

W pliku /etc/systemd/system.conf ustaw następujące linie:

  pi @ unicornpi: ~ $ grep Watchdog /etc/systemd/system.confRuntimeWatchdogSec=10ShutdownWatchdogSec=10min

Powyższe linie mówią:

  • odświeżaj monitor sprzętowy co 10 sekund. jeśli z jakiegoś powodu odświeżanie nie powiedzie się (myślę, że po 3 interwałach, tj. 30s), włącz i wyłącz system

  • po zamknięciu, jeśli system potrzebuje więcej niż 10 minut na ponowne uruchomienie, zasilanie cykl systemu

Po skonfigurowaniu i ponownym uruchomieniu systemu zobaczysz coś takiego w dziennikach dmesg :

  pi @ orangepi: ~ $ dmesg | grep -i watchdog [0.763148] bcm2835-wdt 3f100000.watchdog: Broadcom BCM2835 watchdog timer [1.997557] systemd [1]: Watchdog sprzętowy „Broadcom BCM2835 Watchdog timer”, wersja 0 [2.000728] systemd [1]: Ustaw sprzętowy watchdog na 10 s .  

Jeśli widzisz Ustaw watchdog na 10s wszystko gotowe.

Najlepszym sposobem, jaki znalazłem, aby sprawdzić, czy watchdog działa, jest przeciążenie systemu. Zrobiłem to za pomocą „widelca bomby”, który całkowicie nasyca system widełkami procesu śmieciowego. Jeśli to uruchomisz, Pi przestanie odpowiadać i powinien zadziałać watchdog. Twój system powinien być uruchomiony i ponownie uruchomiony po około minucie:

 : () {: |: &} ;: 

Wklej to do powłoki, a system zostanie usunięty. Zostałeś ostrzeżony.

Więcej informacji na temat systemu nadzoru wbudowanego w Systemd znajduje się na witrynie autora.

Wielkie dzięki za radę. Słyszałem stróża od dawna, ale nigdy go nie próbowałem, ponieważ do tej pory nie było potrzeby budowania inteligentnego ogrodu na dachu z dala od domu (właściwie 50 stóp nad domem). Z innego powodu nie próbowałem, ponieważ tutoriale nie są przyjazne dla początkujących. Kiedy uruchomiłem Rpi1 lata temu, uznałem polecenia terminala za bardzo przerażające (pobranie pliku ZIP (właściwie tar) i rozpakowanie go zajęło mi ponad trzy godziny, ale nie wiedziałem, gdzie znaleźć rozpakowane pliki!) Teraz znajduję polecenia terminala nie jest to przerażające, ale czasami bardzo wydajne, chociaż nadal uwielbiam polecenia terminala Win PowerShell, ...
A rada na początku odpowiedzi dotycząca pierwszego przeczytania, czym jest pies stróżujący, jest bardzo dobra. Nie wiedziałem, że watchdog to w skrócie „watchdog TIMER”. Jest to ważne, ponieważ jeśli wcześniej wiem, że jest to minutnik, mogę lepiej zrozumieć rzeczy. I jak zwykle zacząłem od Wiki, która jest zawsze dobrą lekturą dla początkujących. Teraz wiem, że Watch Dog to właściwie jakiś sprzęt znajdujący się obok RPI. Więc nawet Rpi coś psuje, facet z zewnątrz może przyjść na ratunek (lub „kopnąć”?). Czytając Wiki, daj mi znać, że „kick in” to nie slang, ale termin techniczny.
Nie wiedziałem też, co to jest „demon”. Kiedy byłem dzieckiem, czytałem Biblię, że demon to zły facet, więc prawi programiści tacy jak ja nie powinni używać demonów, w przeciwnym razie mógłbym stać się piekłem. Ale potem Wiki mówi mi, kto ukuł tę nazwę przez facetów z MIT / UNIX i dlaczego pisze się w niej „demon”, a nie demon. Wyjaśnia również, że demony mogą być dobre, a nawet prawy facet Sokrates jest właścicielem demona. W każdym razie skończyłem czytać Wiki i jestem gotowy do rozpoczęcia twoich tutoriali :)
Tak więc postępowałem zgodnie z twoim bardzo szczegółowym samouczkiem dotyczącym watchdoga i stwierdziłem, że wszystko jest w porządku, aż do ustawienia 10 sekund. Następnym krokiem jest wypróbowanie widelca bomby, być może późnym wieczorem lub jutro.
Dziękujemy za zasugerowanie nazwania go „zegarem nadzorującym”. Dokonałem edycji
Uważam, że masz na myśli „demony”, które są uważane za złe / złe. Z drugiej strony „demon” - z „a” - jest życzliwy i wywodzi się z mitologii greckiej. Procesy w systemie działające w tle nazywane są demonami, ponieważ są jak duchy. Działają bez bycia widocznym. https://en.wikipedia.org/wiki/Daemon_(classical_mythology)
Tak, „Watch Dog Timer” opowiada historię bardziej szczegółowo. Ale idea „stróża psa” wciąż jest dla mnie zagadkowa. Poniższy artykuł zawiera więcej szczegółów, ale wciąż wydaje mi się zagadkowy pomysł „kopania psa”. Nigdy wcześniej o tym nie słyszałem. Chyba gdzieś przegapiłem jakiś punkt. Myślę, że to jest jak rekurencja, która jest prosta TYLKO po zrozumieniu „sztuczki”. https://www.microcontrollertips.com/whats-watch-dog-timer-wdt-faq/
Nie jestem pewien, skąd pochodzi ten termin, ale powiedzenie, że coś „wkracza”, jest innym sposobem na powiedzenie, że coś jest wyzwalane lub że coś się dzieje. W przypadku watchdoga, kiedy się włączy, oznacza to, że cykl zasilania zaczyna obowiązywać, generalnie dlatego, że licznik czasu nie został odświeżony, co sugeruje problem.
Bardzo dziękuję za szczegółowe wyjaśnienie wyrażenia „kopanie”. Kiedyś byłem zdezorientowany, ponieważ przeczytałem inny artykuł, w którym wspomina się o podejściu „kopnij psa, bo inaczej cię ugryzie”. To ciągłe kopanie psa jest w rzeczywistości używane przez algoritrm watchog Rpi, w którym, jeśli licznik watchdoga jest ustawiony na 10 sekund, powiedzmy, że Rpi powinien ponownie uruchamiać licznik czasu (kopiąc psa, zanim skończy się jego czas), być może co 8 sekund. Kolejne zamieszanie dla początkujących takich jak ja jest następujące: / aby kontynuować, ...
Cześć @berto, Kolejne zamieszanie jest następujące. Rpi ponownie uruchamia licznik czasu, być może co 8 sekund, ale nie monitoruje go, aby sprawdzić, czy upłynie 10 sekund. Jest to watchdog, który „monitoruje” licznik czasu, a gdy skończy się 10-sekundowy licznik, sprzęt nadzorujący zresetuje Rpi. Innymi słowy, to nie Rpi „wyzwala” reset, ale obwód resetowania sprzętowego watchdoga „włącza się” (lub uruchamia się sam, jeśli chcesz), aby zresetować Rpi.
Cześć, @berto, Właśnie zaktualizowałem mój Rpi3B + stretch do Rpi4B buster. Ponownie postępowałem zgodnie z twoją bardzo szczegółową instrukcją, aby ustawić 10-sekundowy zegar i użyć bomby zegarowej, aby sprawdzić, czy wszystko działa. Innymi słowy, twoja instrukcja jest dobra zarówno dla Rpi3 stretch, jak i Rpi4 buster. Jeszcze raz wielkie dzięki za pomoc.
#2
+4
Milliways
2019-06-14 13:21:10 UTC
view on stackexchange narkive permalink

Obcinanie mocy jest metodą brutalnej siły i wiąże się z ryzykiem.

Konwencjonalnym rozwiązaniem problemów związanych z blokowaniem jest użycie watchdoga.

Istnieje sprzętowy system nadzoru BCM; Jeśli chcesz uruchomić watchdoga sprzętowego, włącz dtparam = watchdog = on w /boot/config.txt

In i samo w sobie to niewiele, chociaż powinno ponownie uruchomić system, jeśli nie regularnie „kopane”. Możesz napisać kod, który otworzy / dev / watchdog, aby go uruchomić.

Jest też demon watchdoga, który możesz skonfigurować tak, aby aktywował watchdoga; powinieneś być w stanie zacząć od sudo systemctl włącz watchdog

PS Nawiasem mówiąc, jeśli chcesz zastosować metodę brutalnej siły - nie przejmuj się mocą cięcia - po prostu pociągnij pin resetowania (oznaczony jako RUN ) niski. Jest to równoważne wyłączeniu i ponownym włączeniu.

#3
+2
tlfong01
2019-06-14 13:27:10 UTC
view on stackexchange narkive permalink

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 .

fork bomb test results

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.

fork bomb

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.

watchdog_test_2019jun1501

Ponownie uruchomiłem i otrzymałem następujący dmesg:

watchdog 3

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.

systemd architecture

/ 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ć.

software switchable PSU

software switch PSU

software switch

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

Taka świetna odpowiedź! Dziękuję również za zdjęcia. Cieszę się, że nie wziąłeś tego tylko dla tego pytania :-D Więc myślę, że potrzebuję zasilacza LM25966S, aby podłączyć go do GPIO, jak powiedziałeś. Spróbuję!!! Dobrze, że wciąż mam swoją starą lutownicę ...
@Jurudocs Dziękuję za miłe słowa. Wytnąłem, wkleiłem i zmodyfikowałem moje stare odpowiedzi na twoje pytanie, więc nie zajęło mi to dużo czasu. Jestem hobbystą PSU i majsterkowałem zasilacze używając chipów LM2596 i cewek cewek itp. Ale w dzisiejszych czasach wszystko idzie SMD, a zmontowane moduły są tanie jak grosze, więc byłem leniwy, aby "robić" rzeczy. Nawiasem mówiąc, aby bałaganić wokół zasilacza LM2596, nie musisz testować za pomocą Rpi GPIO. Możesz po prostu przetestować ręcznie! :) Powodzenia!
Zauważyłem, że wspomniałeś o czytaniu na Systemd. Chociaż zdecydowanie zalecam, abyś to zrobił, ponieważ jest to istotny element sposobu działania współczesnych systemów Linux, pełne zrozumienie zajmie dużo czasu i nie będzie konieczne wypróbowanie watchdoga. :)
@berto, Zgadzam się, że zrozumienie skomplikowanego SystemD może zająć mi bardzo dużo czasu. Jak mówi Poettering: „[systemd] nigdy nie skończył, nigdy nie był kompletny, ale śledził postęp technologii”. Pamiętam Olivera Heaviside'a, mówiącego: „Czy mam odmówić jedzenia, ponieważ nie do końca rozumiem mechanizm trawienia?”. - https://en.wikiquote.org/wiki/Oliver_Heaviside Więc teraz zapomnę systemd i wrócę do watchdoga. Właściwie muszę najpierw nauczyć się Bash, zanim zrozumiem dziwny skrypt Bash w Fork Bomb.
Linia bomby widelca jest dość prosta, gdy zrozumiesz, na co patrzysz. Jest to funkcja o nazwie `:`, która wywołuje się rekurencyjnie i umieszcza w tle swoją kopię, która również wywołuje się rekurencyjnie. Strona Wikipedii, którą masz w swoich notatkach, wyjaśnia to dalej.
Cóż, nie zdawałem sobie sprawy, że symbol „:” może być nazwą funkcji. Na początku błędnie pomyślałem, że funkcja nie ma nazwy, innymi słowy, jest to „lambda”. Wydaje mi się, że ponad 90% odwiedzających to forum nie rozumie, na czym polega idea rekurencji, nie wspominając o zastosowanej tu podwójnej rekurencji. Rekurencja w matematyce to algorytm, który dobiegłby końca i rozwiązałby problem. W tym przypadku nie ma końca. NIEPRAWIDŁOWE I Mylące jest wywołanie funkcji rekurencyjnej. Funkcja wywołująca samą siebie nie jest rekurencją w pełnym tego słowa znaczeniu ani zgodnie z rygorystyczną definicją matematyczną.
Znalazłem Twoją starszą odpowiedź (6 lat temu!) Tutaj: https://raspberrypi.stackexchange.com/questions/3732/watchdog-daemon-not-restarting-pi-after-fork-bomb Sprawy są bardziej skomplikowane niż myślałem, więc spędzę więcej czasu przed rozbrojeniem bomby. :)
Sprawdziłem wszystko OK. Więc wykonałem widelec bombowy. Zgodnie z oczekiwaniami system uruchomił się ponownie za około 15 sekund. Podsumowując, podążyłem za Twoimi fajnymi samouczkami i stwierdziłem, że wszystko jest w porządku, chociaż nie bardzo rozumiem, co się dzieje. Muszę poświęcić więcej czasu na zrozumienie poleceń, zanim będę wiedział, jak ustawić zegar watchdoga.
#4
+1
Wildbill
2019-06-15 00:47:34 UTC
view on stackexchange narkive permalink

Mam sporo pisów. Wszystkie z wyjątkiem jednego działały bez zarzutu. Problematyczne dziecko okresowo ulegało awarii i nigdy nie odzyskało sprawności po przerwie w zasilaniu bez ponownego włączenia i wyłączenia zasilania. Każdej nocy uruchamiałem się ponownie za pomocą crona i to trochę pomogło.

Jednak naprawiło to zabranie karty SD i sprzętu czujnika i umieszczenie ich w innym Pi. Od tego czasu działa bezbłędnie. Może i Ty masz problem ze sprzętem.

Nie znalazłem drugiego akapitu dotyczącego problemu ze sprzętem. Czy chodziło Ci o to, że karta SD i czujnik spowodowały wszystkie kłopoty, a ich wymiana rozwiązała problem?
Nie, samo Pi było problemem. Miałem zapasowy, więc przeniosłem kartę SD i czujniki do zapasowej i użyłem jej zamiast oryginału. Od tamtej pory żadnych problemów.
Widzę. Dlatego zawsze dobrze jest mieć wolne Rpi do rozwiązywania problemów z wymianą. Być może PO powinien również to rozważyć.
#5
  0
thesnow
2019-06-15 01:15:35 UTC
view on stackexchange narkive permalink

Jeśli masz Wi-Fi i potrzebujesz tylko wyłączyć / włączyć zasilanie, możesz również rozważyć użycie inteligentnej wtyczki. Amazon robi taki za ~ 25 USD, możesz go włączać / wyłączać zdalnie, a także skonfigurować procedury timera, jeśli jest to preferowane. Mam kilka od kilku miesięcy i są one dość niezawodne. W rzeczywistości nie potrzebujesz echa ani żadnego innego dedykowanego urządzenia. Używam swojego smartfona. Amazon Smart Plug

Edycja: zdaję sobie sprawę, że to nie rozwiązuje pierwszej części pytania, ale gdybym miał perspektywę 2-godzinnej jazdy, gdyby coś poszło źle, rozważyłbym podejście warstwowe.

, Bardzo doceniam twoją propozycję warstwowego podejścia z inteligentną wtyczką na górnej warstwie. Właściwie od kilku miesięcy próbuję zindywidualizować inteligentną wtyczkę opartą na kontrolerze WiFi ESP8266. Jednak odkryłem, że ESP8266 z NodeMCU Lua ma bardzo stromą krzywą uczenia się. Nowicjuszowi zajęło mi ponad 100 godzin samo mrugnięcie diodą LED (w porównaniu do mniej niż jednej godziny pisania programu Arduino lub Rpi), więc niestety się poddałem i teraz zdecydowałem się oszukać, kupując inteligentną wtyczkę XiaoMi ESP8266 i zmodyfikuj ją . Wkrótce dodam twoją sugestię do mojej odpowiedzi. Jeszcze raz wielkie dzięki! :)


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...