Monit - abyśmy byli pewni, że Domoticz działa...
Ostatnio miałem dużo problemów z Raspberry Pi i kiepskim zapisem na kartę SD. Czego bym nie robił, po dwóch, trzech tygodniach system 'się rozjeżdżał', finalnie kończąc na 'Memory fault' i 'Kernel panic'. Kiepska sprawa. Co prawda na Raspberry Pi nie stoją żadne krytyczne usługi, ale ciągłe odzyskiwanie z backupu nie jest najciekawszą pracą, jaką można robić...
Na pewno pomogło przeniesienie systemu Raspberry Pi na dysk HDD, ale dodatkowo można dołączyć sprawdzanie statusu Domoticz - u mnie są problemy z pluginami i czasem lubi nie wystartować.
Pomaga w tym 'monit' - oprogramowanie, które dba o to, aby nasze procesy były uruchomione, a w razie ich nieprzewidzianego zatrzymania - pojawiły się ponownie. Opisywał to już Łukasz Jokiel na swoim blogu, ale od wiedzy jeszcze nikt nie umarł, dlatego pozwolę sobie opisać to i u siebie.
Na początku zaktualizujmy system:
sudo apt-get update
sudo apt-get upgrade
I zainstalujmy 'monit'
sudo apt-get install monit
Od razu po tym możemy przystąpić do zmian w domyślnym pliku konfiguracyjnym. Jest dość pokaźny, w większości opatrzony komentarzami przy przykładach.
sudo nano /etc/monit/monitrc
Dopiszmy sekcję (zamiast HASŁO podajecie hasło jakim chcecie się logować do monit'a w przeglądarce):
set httpd port 8890 and
use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server
allow admin:HASŁO # and require user 'admin' with password 'monit'
use address 0.0.0.0 # only accept connection from localhost
allow 0.0.0.0/0.0.0.0
allow @monit # allow users of group 'monit' to connect (rw)
allow @users readonly # allow users of group 'users' to connect readonly
Wszyscy sugerują na końcu, więc dodajmy na końcu również:
check process domoticz with pidfile /var/run/domoticz.pid
start program = "/etc/init.d/domoticz.sh start"
stop program = "/etc/init.d/domoticz.sh stop"
if failed
url http://127.0.0.1:80/json.htm?type=command¶m=getversion
and content = '"status" : "OK"'
for 2 cycles
then restart
if 5 restarts within 5 cycles then exec "/sbin/reboot"
UWAGA - ostatnia linijka mówi o tym, że jeżeli 10 (2*5) razy nie powiedzie się uruchomienie Domoticz, to nastąpi restart Raspberry Pi - bądźcie świadomi! Do tego - zmieńcie port Domoticz na odpowiedni o Was (127.0.0.1 jest adresem hosta lokalnego) - u mnie jest to 80, domyślnym w Domoticz jest 8080 (dziękuję za sugestię).
Teraz
sudo systemctl enable monit.service
sudo systemctl restart monit.service
Sprawdzamy. Pierwsza komenda sprawdzi poprawność pliku konfiguracyjnego, druga poda pełen status.
sudo monit -t
sudo monit status
Wygląda na to, że działa. Teraz wystarczy
sudo service domoticz stop
i zobaczymy czy monit przywróci go do życia spoza grobu.
Taram! Bangla!
Strona przedstawia się następująco:
Ważne - wpisujecie adres swojego Raspberry, po nim port 8890 (lub taki, jaki ustawiliście w skrypcie konfiguracyjnym monitrc). Jeżeli macie konfiguracje rozproszone (Domoticz na innej maszynie, albo chcecie monitorować procesy na innych Raspberry) - musicie wpisać odpowienie adresy IP i porty.
Zmieniamy, mieszamy, testujemy, sprawdzamy...
I później:
Na pewno pomogło przeniesienie systemu Raspberry Pi na dysk HDD, ale dodatkowo można dołączyć sprawdzanie statusu Domoticz - u mnie są problemy z pluginami i czasem lubi nie wystartować.
Pomaga w tym 'monit' - oprogramowanie, które dba o to, aby nasze procesy były uruchomione, a w razie ich nieprzewidzianego zatrzymania - pojawiły się ponownie. Opisywał to już Łukasz Jokiel na swoim blogu, ale od wiedzy jeszcze nikt nie umarł, dlatego pozwolę sobie opisać to i u siebie.
Na początku zaktualizujmy system:
sudo apt-get update
sudo apt-get upgrade
I zainstalujmy 'monit'
sudo apt-get install monit
Od razu po tym możemy przystąpić do zmian w domyślnym pliku konfiguracyjnym. Jest dość pokaźny, w większości opatrzony komentarzami przy przykładach.
sudo nano /etc/monit/monitrc
Dopiszmy sekcję (zamiast HASŁO podajecie hasło jakim chcecie się logować do monit'a w przeglądarce):
set httpd port 8890 and
use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server
allow admin:HASŁO # and require user 'admin' with password 'monit'
use address 0.0.0.0 # only accept connection from localhost
allow 0.0.0.0/0.0.0.0
allow @monit # allow users of group 'monit' to connect (rw)
allow @users readonly # allow users of group 'users' to connect readonly
Wszyscy sugerują na końcu, więc dodajmy na końcu również:
check process domoticz with pidfile /var/run/domoticz.pid
start program = "/etc/init.d/domoticz.sh start"
stop program = "/etc/init.d/domoticz.sh stop"
if failed
url http://127.0.0.1:80/json.htm?type=command¶m=getversion
and content = '"status" : "OK"'
for 2 cycles
then restart
if 5 restarts within 5 cycles then exec "/sbin/reboot"
UWAGA - ostatnia linijka mówi o tym, że jeżeli 10 (2*5) razy nie powiedzie się uruchomienie Domoticz, to nastąpi restart Raspberry Pi - bądźcie świadomi! Do tego - zmieńcie port Domoticz na odpowiedni o Was (127.0.0.1 jest adresem hosta lokalnego) - u mnie jest to 80, domyślnym w Domoticz jest 8080 (dziękuję za sugestię).
Teraz
sudo systemctl enable monit.service
sudo systemctl restart monit.service
Sprawdzamy. Pierwsza komenda sprawdzi poprawność pliku konfiguracyjnego, druga poda pełen status.
sudo monit -t
sudo monit status
Wygląda na to, że działa. Teraz wystarczy
sudo service domoticz stop
i zobaczymy czy monit przywróci go do życia spoza grobu.
Taram! Bangla!
Strona przedstawia się następująco:
Ważne - wpisujecie adres swojego Raspberry, po nim port 8890 (lub taki, jaki ustawiliście w skrypcie konfiguracyjnym monitrc). Jeżeli macie konfiguracje rozproszone (Domoticz na innej maszynie, albo chcecie monitorować procesy na innych Raspberry) - musicie wpisać odpowienie adresy IP i porty.
Mała sugestia - jeżeli będziecie chcieli kiedyś wyłączyć świadomie Domoticz (chcecie coś sprawdzić, dodać nowy plugin powoli, itp.) - monit od razu włączy serwis Domoticz. No, taka jego funkcja. Dlatego to, musicie po kolei wydać polecenia:
sudo /etc/init.d/monit stop
sudo /etc/init.d/domoticz.sh stop
Zmieniamy, mieszamy, testujemy, sprawdzamy...
I później:
sudo /etc/init.d/domoticz.sh start
sudo /etc/init.d/monit start
Dla pewności, poniżej zawartość całego pliku:
set daemon 120
set logfile /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
set eventqueue
basedir /var/lib/monit/events
slots 100
include /etc/monit/conf.d/*
set httpd port 8890 and
use address localhost
allow localhost
allow admin:xxxxxxxxxxxx
use address 0.0.0.0
allow 0.0.0.0/0.0.0.0
allow @monit
allow @users readonly
check process domoticz with pidfile /var/run/domoticz.pid
start program = "/etc/init.d/domoticz.sh start"
stop program = "/etc/init.d/domoticz.sh stop"
if failed
url http://127.0.0.1:80/json.htm?type=command¶m=getversion
and content = '"status" : "OK"'
for 2 cycles
then restart
if 5 restarts within 5 cycles then exec "/sbin/reboot"
Dla pewności, poniżej zawartość całego pliku:
set daemon 120
set logfile /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
set eventqueue
basedir /var/lib/monit/events
slots 100
include /etc/monit/conf.d/*
set httpd port 8890 and
use address localhost
allow localhost
allow admin:xxxxxxxxxxxx
use address 0.0.0.0
allow 0.0.0.0/0.0.0.0
allow @monit
allow @users readonly
check process domoticz with pidfile /var/run/domoticz.pid
start program = "/etc/init.d/domoticz.sh start"
stop program = "/etc/init.d/domoticz.sh stop"
if failed
url http://127.0.0.1:80/json.htm?type=command¶m=getversion
and content = '"status" : "OK"'
for 2 cycles
then restart
if 5 restarts within 5 cycles then exec "/sbin/reboot"
Ten komentarz został usunięty przez autora.
OdpowiedzUsuńDo /etc/monit/monitr dodaj c ;)
OdpowiedzUsuńOczywiście, bardzo dziękuję. Taki sam błąd popełniłem próbując i Copy-Paste zrobiło swoje. Poprawione.
UsuńWitam.
OdpowiedzUsuńW url http://127.0.0.1:80/json.htm?type=command¶m=getversion zakładamy że system pracuje na porcie 80 ?
Może warto zmienić w tekście na domyślny 8080 albo doprecyzować. Dla początkujących będzie jaśniej.
Dziękuję za sugestię. Postaram się odpowiednio profilować artykuły. Do tej pory często po prostu opisywałem i zostawiałem użytkownikowi miejsce na eksperymenty.
UsuńCześć,
OdpowiedzUsuńCzy dobrze rozumiem za wiki Domoticza, jeśli mamy narzucone hasło/uzytkownika na Domoticza (nawet połączenia lokalne), to komenda JSON powinna wyglądać następująco?
url http://user:password@IP_RASPBERRY:DOMOTICZ_PORT/json.htm?type=command¶m=getversion
Ten komentarz został usunięty przez autora.
OdpowiedzUsuńCześć,
OdpowiedzUsuńMonit wykonuje swoje zadanie poprawnie - tj. po położeniu Domoticza, podnosi go na nowo. Pytanie mam następujące: monit ma opóźnienie w odświeżaniu informacji nt. statusu działania usługi Domoticza. Czy jest to w jakiś sposób sparametryzowane (czas opóźnienia odświeżania informacji)?
W sumie się nad tym nie zastanawiałem, ale czy nie będzie za to odpowiadał parametr 'set daemon 120 # check services at 2-minute intervals' w monitrc?
UsuńDokładnie tak, set deamon przetestowany na różnych wartościach.
OdpowiedzUsuńKolejne pytanie: zauważyłem, że monit nie jest uruchamiany po restarcie Rpi3. Czy przy jego domyślenj konfiguracji jest to normalne zachowanie? Jeśli tak, to w jaki - bezpieczny - sposób, dodać uruchamianie monit do autostartu?
Hmmm. Powinien się uruchomić. Co mówi /var/log/monit.log?
UsuńWpisy z loga:
Usuń[CET Feb 26 17:17:05] info : Starting Monit 5.20.0 daemon with http interface at [0.0.0.0]:8890
[CET Feb 26 17:17:05] info : 'raspberrypi' Monit 5.20.0 started
[CET Feb 26 17:17:05] error : HTTP server -- Cannot translate IPv4 socket [0.0.0.0]:8890 -- Name or service not known
[CET Feb 26 17:17:05] error : HTTP server -- Cannot translate IPv6 socket [0.0.0.0]:8890 -- Name or service not known
[CET Feb 26 17:17:05] error : 'domoticz' process is not running
[CET Feb 26 17:17:05] info : 'domoticz' trying to restart
[CET Feb 26 17:17:05] info : 'domoticz' start: '/etc/init.d/domoticz.sh start'
Po restarcie Rpi3, przy sprawdzaniu czy monit działał (sudo monit status), dostawałem w konsoli: HTTP server -- Cannot translate IPv4 socket [0.0.0.0]:8890 -- Name or service not known
Zastosowałem rozwiazane z wpisem w rc.local.
sudo nano /etc/rc.local
wiersz dodany do rc.local:
home/pi/scripts/runmonit.sh
zawartość runmonit.sh:
/usr/bin/sudo systemctl restart monit.service
Taka kombinacja spowodowała, że monit działa po restarcie Rpi3.
Nie wiem jednak czy jest to prawidłowe/bezpieczne rozwiązanie.
Świeży log, po zakomentowaniu rc.local i restarcie Rpi3.
Usuń[CET Feb 26 19:50:19] info : Starting Monit 5.20.0 daemon with http interface at [0.0.0.0]:8890
[CET Feb 26 19:50:19] info : 'raspberrypi' Monit 5.20.0 started
[CET Feb 26 19:50:19] error : HTTP server -- Cannot translate IPv4 socket [0.0.0.0]:8890 -- Name or service not known
[CET Feb 26 19:50:19] error : HTTP server -- Cannot translate IPv6 socket [0.0.0.0]:8890 -- Name or service not known
[CET Feb 26 19:50:19] error : 'domoticz' process is not running
[CET Feb 26 19:50:19] info : 'domoticz' trying to restart
[CET Feb 26 19:50:19] info : 'domoticz' start: '/etc/init.d/domoticz.sh start'
[CET Feb 26 19:52:29] info : 'domoticz' process is running with pid 479
Więc teoretycznie monit działa, czyż nie? A jednak, sprawdzenie czy monit działa po uruchomieniu Rpi3 (sudo monit status), daje dokładnie komunikat:
Cannot create socket to [0.0.0.0]:8890 -- Connection refused
Dopiero po wpisaniu (sudo systemctl restart monit.service), po sprawdzeniu (sudo monit status), dostaję poprawny raport z działania usług, kóre monit monitoruje.
Mam ten sam problem na Rpi4. Domoticz wstaje ale Monit Web serwice już nie.
UsuńCannot create socket to [0.0.0.0]:8890 -- Connection refused
A jak zrobić, aby Domoticz restartował się automatycznie codziennie np. o g.3.30 w nocy?
OdpowiedzUsuńDomoticz czy całe Raspberry (jeżeli na nim masz postawiony system)? Tak czy siak - najlepiej wpis w crontab.
UsuńW sumie to sam Domoticz, bo często jakiś plugin etc przestaje działać i zazwyczaj restart Domoticza pomaga. Dlatego jakby go codziennie w nocy restartować to nawet jak w ciągu dnia coś "padnie" to na drugi dzień już będzie działało.
UsuńTo trzeba wpisać w crontab aby o danej godzinie restartować Domoticza?
Na przykład: @hourly sudo sudo service domoticz restart
UsuńTen komentarz został usunięty przez autora.
OdpowiedzUsuńW przypadku instalacji programu "Monit", gdzie jest również "Domoticz" na Malince, na końcu pliku w /etc/monit/monitrc warto dodać jeszcze linijkę:
OdpowiedzUsuńcheck system localhost
nawiązując do problemu "Monit service name error"
dokładnie tu:
https://stackoverflow.com/questions/8436555/monit-service-name-error
Problem ten pojawi się gdy naszego hosta (Malinkę) nazwiemy akurat "Domoticz".
Nie zaszkodzi a może pomóc.
Dzięki, przydało się !
UsuńCześć,
OdpowiedzUsuńCzy aby to zrobić to malina musi być podpięta do internetu po kablu, czy to nie ma znaczenia?
Niby zrobiłem wszystko tak jak jest w poradniku, a mam coś takiego:
pi@DOMOTICZ:~ $ sudo monit -t
'check system' not defined in control file, failed to add automatic configuration (service name DOMOTICZ is used already) -- please add 'check system ' manually
/etc/monit/monitrc:25: Service name conflict, DOMOTICZ already defined '/sbin/reboot'
pi@DOMOTICZ:~ $ sudo monit status
'check system' not defined in control file, failed to add automatic configuration (service name DOMOTICZ is used already) -- please add 'check system ' manually
/etc/monit/monitrc:25: Service name conflict, DOMOTICZ already defined '/sbin/reboot'
Na pewno nie musi, bo w tym przypadku nie ma to znaczenia.
UsuńCzy udało Ci sie rozwiązać problem? Mam ten sam komunikat :(
Usuńchodzi o nazwe hosta, trzeba zmienić z domoticz na jakąś inną
UsuńWitam. Swietny poradnik jak i pozostałe.
OdpowiedzUsuńMam pytanie ponieważ u mnie po resecie Maliny i sprawdzenie statusu Monit:
Cannot create socket to [0.0.0.0]:8890 -- Connection refused
Czyli monit nie uruchamia się sam po resecie jak zrobić aby uruchamiał się razem z Maliną ?
a restart serwisu pomaga? sudo service monit restart?
UsuńPomaga. Ale jeżeli będzie zanik napięcia domoticz nie uruchomi się to monit go nie uruchomi.
Usuńmożliwe, że Monit działa, tylko serwer http nie wstaje, przetestuj - nie uruchamiaj ponownie usługi Monita, wyłącz Domoticza i poczekaj chwile - prawdopodobnie Domoticz wstanie, ewentualnie jako workaround problemu można w CRONie dodać wpis, który spowoduje po restarcie Malinki, na przykład po 2 minutach, restart (jak wyżej) serwisu Monita :)
UsuńDołączam się do pytania powyżej
OdpowiedzUsuńWitam, faktycznie po instalacji i resecie Maliny, Monit jakby nie wstawał. Serwer http nie działa, komenda sudo monit status nie daje pozytywnego rezultatu, ale Domoticz jest restartowany. Po 2 minutach uruchamia się ponownie.
OdpowiedzUsuńSkonfigurowałem powiadomienia mailowe, po resecie Maliny działają, pomimo tego że Monit wydaje się nieaktywny.
UsuńDzięki.Wszystko działa
OdpowiedzUsuńdzień dobry mam problem niestety ze zrozumieniem(jestem początkującym)
OdpowiedzUsuńco mam wpisać w tych linijkach:
use address 0.0.0.0
allow 0.0.0.0/0.0.0.0 i w
url http://127.0.0.1:80/json.htm?type=command¶m=getversion
Jeżeli monit instalujesz tam gdzie Domoticz - zostawiasz jak jest. Te cyfry wskazują na adres lokalnego komputera (localhost)
UsuńTutaj masz to dokładniej opisane:
Usuńhttps://www.domoticz.com/wiki/Monitoring_domoticz
Przykład:
allow 192.168.0.1/255.255.255.0 #This will only allow hosts coming from the local network (change x.x.x.1 to your own LAN IP-range).
allow localhost #use in combination with local network to allow command line to work