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&param=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&param=getversion
       and content = '”status” : „OK”’
   for 2 cycles
   then restart
if 5 restarts within 5 cycles then exec „/sbin/reboot”

38 komentarzy do “Monit – abyśmy byli pewni, że Domoticz działa…”

  1. Oczywiście, bardzo dziękuję. Taki sam błąd popełniłem próbując i Copy-Paste zrobiło swoje. Poprawione.

  2. 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.

  3. Cześć,
    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)?

  4. 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?

  5. Dokładnie tak, set deamon przetestowany na różnych wartościach.

    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?

    • Mam ten sam problem na Rpi4. Domoticz wstaje ale Monit Web serwice już nie.
      Cannot create socket to [0.0.0.0]:8890 — Connection refused

  6. Wpisy z loga:

    [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.

  7. Świeży log, po zakomentowaniu rc.local i restarcie Rpi3.

    [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.

  8. 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.
    To trzeba wpisać w crontab aby o danej godzinie restartować Domoticza?

  9. Cześć,

    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'

  10. Witam. Swietny poradnik jak i pozostałe.
    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ą ?

  11. 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 🙂

  12. 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.

  13. Witam. Jeśli nadal ma ktoś problem z uruchomienie monita po restarcie Raspberry i komunikatem:
    Cannot create socket to [0.0.0.0]:8890 — Connection refused
    wystarczy w sudo nano /etc/monit/monitrc
    usunąć # na początku linii:
    # with start delay 240 # optional: delay the first check by 4-minutes (by
    serwer http wstaje z opóźnieniem ustawionym w tej linijce, ja skróciłem opóźnienie do 65 i jest ok.

  14. Witam, mam problem z połączeniem do myDomoticz po restarcie domoticza połączenie z myDomoticz jest utrzymywane średnio przez dobę a później w myDomoticz jest czerwony ludzik. Jak zmusić monita aby pilnował również tego. Dzięki za pomoc.

  15. Jeżeli monit instalujesz tam gdzie Domoticz – zostawiasz jak jest. Te cyfry wskazują na adres lokalnego komputera (localhost)

Możliwość komentowania została wyłączona.