2012-01-31 14 views
15

Witam, czy ktoś może mi powiedzieć, jak postępować z watchdogiem oprogramowania w Linuksie. Mam program "SampleApplication", który działa nieprzerwanie i muszę go ponownie uruchomić, jeśli jego zawiesza się lub zamyka niespodziewanie.jak używać watchdog oprogramowania linux

Byłem googling o tym i znaleziono linux ma watchdog w/dev/watchdog, ale nie wiem, jak go używać.Could ktoś mi pomóc z przykładem.

Moje pytanie dotyczy miejsca podania nazwy aplikacji i interwału opóźnienia do ponownego uruchomienia. Ponieważ jestem nowy w Linuksie, proszę o zwrócenie mi próbki, jeśli to możliwe. Dzięki

+1

O ile mi wiadomo, tylko upewnia się, że cały system nie jest zawieszony i resetuje się, jeśli tak jest.Nie sądzę, że możesz go użyć, aby utrzymać przy życiu aplikację użytkownika. – Janne

+0

Mam doświadczenie z narzędziem we wbudowanej aplikacji dla systemu Linux, które robi dokładnie to, o co prosisz, niestety nie pamiętam jego nazwy, w przeciwnym razie wstawiłbym odpowiedź, ale wiem, że działa mniej więcej tak, jak sugerujesz w w każdym przypadku, więc nie jest to zły pomysł. Inną opcją jest użycie określonego portu na localhost address 27.0.0.1 i wysłanie do niego procesów oraz monitorowanie demona tego oprogramowania./dev/watchdog jest dla watchdoga sprzętu, twój demon może to utrzymywać, więc ostatecznie, jeśli demon zatrzyma się, system zresetuje się (w ostateczności). – Clifford

Odpowiedz

12

Większość programów Unix/Linux init będzie zarządzać demonami i wznawiać je. Zajrzyj do umieszczenia swojej usługi w /etc/inittab. Lub możesz używać Upstart lub systemd.

Wszystkie te programy działają jako PID 1, a ich zadaniem jest monitorowanie i ponowne uruchamianie procesów systemowych.

Z Twojego tagu Busybox zakładam, że korzystasz z systemu wbudowanego. Na ich temat skrypty startowe w stylu System V ze wszystkimi swoimi skryptami powłoki są naprawdę przesadne. Powinieneś prawdopodobnie zgrać wszystko i zastąpić go wpisami w /etc/inittab lub w działaniach upstart lub systemd.

+0

Witam @Zan dzięki za twoje dane wejściowe, dodałem ":: respawn:/path/app" do /etc/inittab i aplikacja wykonana poprawnie po ponownym uruchomieniu urządzenia, jedynym problemem jest to, że ten wpis jest tymczasowy i zostanie automatycznie usunięty po ponownym uruchomieniu urządzenia. Czy jest jakiś sposób, aby procedura inicjalizacji stała się trwała. –

+1

@ITion: To nie ma być tymczasowe. Musisz używać 'initrd' dla swojego katalogu'/'. Lub prawdopodobnie masz tylko do odczytu warstwę '/' oraz warstwę do odczytu i zapisu u góry. –

7

Co powiesz na używanie crona? Ustaw małe zadanie cron, które działa co minutę. Sprawdź, czy twoja aplikacja jest uruchomiona (używając ps), a jeśli nie, uruchom ją ponownie.

Zrób mały skrypt tak:

#!/bin/bash 
if [ ! "$(pidof myapp)" ] 
then 
    /path/to/myapp & 
fi 

test, jeśli "myapp" znajduje się na liście procesów. "!" odwraca test. Jeśli go nie ma, uruchamia "myapp". "&" jest takie, że zaczyna się w tle.

Dodaj to do cron. W zależności od systemu i preferencji można to zrobić na kilka sposobów. Klasyczny to użycie crontab. Jest wiele dokumentacji, w jaki sposób określić linię crontab, ale prawdopodobnie chcesz coś takiego:

* * * * * /path/to/the/script.sh > /dev/null 

To będzie uruchomić testy każdą minutą każdej godzinie każdego ... Masz pomysł.

+0

Witam @Janne dzięki za odpowiedź. Ale linux, którego używam, to Busybox i ma już Crona. Czy jest jakiś inny sposób? –

+0

A więc system wbudowany. Dokładnie to, co jest dostępne, zależy od konkretnego zainstalowanego na nim linuksa (busybox to po prostu aplikacja powszechnie używana w wielu małych systemach). Jeśli wszystko inne zawiedzie, zawsze możesz napisać małą aplikację c, która znajduje się w pętli z timingiem i monitoruje listę procesów lub jakiś plik stanu, który pisze twoja aplikacja, a następnie ponownie uruchamia proces, jeśli to konieczne. – Janne

+0

@Janne jest możliwe utworzenie małego skryptu, który wyszukuje nazwę procesu, ponieważ pid zawsze się zmienia? Z poważaniem, robert –

2

Dokumentacja watchdog jest tutaj: http://linux.die.net/man/8/watchdog

Ale to brzmi jak nie jest to, co chcesz. Program nadzoru oprogramowania linuksowego uruchomi ponownie komputer, a nie tylko wznowi proces.

Możesz łatwo stworzyć własny organ nadzoru. Na przykład, możesz okresowo napisać jakiś plik tymczasowy i uruchomić skrypt, który raz po raz sprawdza dany plik i ponownie uruchamia proces, jeśli nie był od jakiegoś czasu aktualizowany.

4

Zastosowanie /etc/inittab można go wykorzystać, aby rozpocząć w określonych poziomach biegać i jeśli zostanie zabity zostaje on ponownie uruchomiony automatycznie

n:2345:respawn:/path/to/app 

Pozwoli to respawn poziomu run 2345 prawdopodobnie wystarczy 3 i 5 ale to działa dobrze i jest wbudowane w Linuksa.

12

Ponieważ moderatorzy zignorować post-ulepszeń teraz będę musiał go pisać osobno

Linux oprogramowanie watchdog będzie ponownie uruchomić komputer, a nie tylko ponownie uruchomić proces.

No to po prostu nie jest prawdziwe, to jest bardzo możliwe, aby ponownie uruchomić jednego lub wielu procesów po sygnałach strażniczych, że systemy wisi - można nawet przerwać restart lub zrobić soft restart, jedna jest w stanie skonfiguruj "test" i "napraw" -scripts/binary, które robią, co chcesz. Wersja watchdoga została zaabsorbowana do poziomu niemal nie do użycia ... sądzę, że świat nigdy się nie dowie, dlaczego busybox-devs zdecydowali się porzucić podstawowe funkcje - na razie najlepiej byłoby w ogóle unikać busyboxa - > poprawki prędkości są prawie nieistniejące, zmniejszenie rozmiaru nie rekompensuje ogromnej utraty funkcjonalności./bin/bash jest raczej mały - przekompiluj wszystko z flagą "-Os", jeśli rozmiar ma znaczenie i jesteś gotowy do pracy - out-of-the-box watchdog, który pozwala na wszystko, czego można chcieć.

Aha, i NIE PROSZĘ tworzyć własnego psa stróżującego - najprawdopodobniej pozostawi Cię z nieobsługiwanymi błędami i pewnego dnia zepsuje ci życie.

+3

Witamy na SO. Twoje zmiany nie zostały zignorowane, ale zostały uznane za nieważne, ponieważ zmieniają treść oryginalnego plakatu. Komentarz byłby właściwym sposobem poinformowania go. Ale najpierw musisz zdobyć reputację, przepraszam za to. – pmr

+0

Ale jeśli watchdog sygnalizuje zawieszenie * systemu *, to nie identyfikuje indywidualnego procesu do ponownego uruchomienia. Nie jest to odpowiedź na pytanie - monitorowanie jednego lub więcej procesów z drugiego jest uzasadnionym celem, a nie osiągnięciem przez/dev/watchdog. Pytanie to nie sugeruje nawet stworzenia własnego organu nadzorującego; pokazuje jedynie nieporozumienie dotyczące różnicy między urządzeniem/dev/watchdog a procesem monitorowania oprogramowania (lub oprogramowania watchdoga). – Clifford

0

Jeśli ktoś przybył na tej stronie, patrząc na watchdog systemu operacyjnego (co nie jest wprost co PO chciała), to jest to, czego potrzebujesz:

sudo apt-get install watchdog 
service watchdog status 
service watchdog start 

Aby sprawdzić, czy to działa wykonać:

tail -f /var/log/syslog | grep watchdog 

Powinieneś zobaczyć coś takiego:

Jul 25 22:03:35 nuc watchdog[14229]: still alive after 733 interval(s) 
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 734 interval(s) 
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 735 interval(s) 
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 736 interval(s) 
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 737 interval(s) 

Mam nadzieję, że odpowiadam poprawnie na pytanie. Wszystkie pozostałe odpowiedzi wydają się bardzo różne.

0

Możesz spróbować wdog, który jest narzędziem napisanym w języku C++ i łączącym się ze strukturą Kahless_9. Kod źródłowy do tego można pobrać z: https://github.com/zepher999/wdog i konsekwentnie aktualizowany w celu dostosowania do własnych potrzeb. Nadal istnieje kilka zmian w liście TODO wymaganych w przyszłości, ale jest to zgodne z aktualnymi wymaganiami.

Narzędzie wymaga pliku csv jako wejścia, w którym znajdują się wszystkie procesy, które mają być oglądane z ich argumentami. Po uruchomieniu narzędzie uruchamia wszystkie procesy określone w pliku csv i monitoruje je pod kątem zakończenia/zakończenia, po czym ponownie uruchamia proces.

Obecnie wdog pozwala na zatrzymanie/zabicie monitorowanych procesów, a także możliwość uruchomienia narzędzia w trybie gorącym lub zimnym. Tryb Hot umożliwia narzędziu użycie buforowanych rekordów do monitorowania już rozpoczętych procesów, podczas gdy tryb zimny rozpoczyna odrzuca takie buforowane wartości, próbując uruchomić wszystkie procesy.

Narzędzie ma także możliwość uruchomienia własnej instancji, aby monitorować się, a tym samym mieć watchdoga dla watchdoga.

Powiązane problemy