Run standalone:
monit -c /path/to/monitrc
Check syntax:
monit -t monit -t -c /path/to/monitrc
Override log file location in config:
set log /var/log/monit.log
or with CLI option:
monit -l /var/log/monit.log
Do not go into background:
monit -I
Make verbose output:
monit -v monit -vv
Full length commant may look like:
sudo monit -v status sudo monit -Iv validate sudo monit -Ivv -c /path/to/monitrc
To debug start/stop scripts write wrapper that redirects STDIO to file:
#/bin/sh exec 1>my.log exec 2>my.log echo "$@" exec "$@"
Limiting server to localhost:
set httpd port 2812 use address localhost allow localhost allow admin:monit
Example:
check process App with pidfile /var/run/app.pid start program = "/usr/bin/app start" stop program = "/usr/bin/app stop" mode passive
check process memcached with match memcached start program = "/usr/bin/systemctl start memcached" stop program = "/usr/bin/systemctl stop memcached" if failed host 127.0.0.1 port 11211 protocol MEMCACHE then restart if cpu > 70% for 2 cycles then alert if cpu > 98% for 5 cycles then restart if 2 restarts within 3 cycles then timeout check process myapp with pidfile /run/myapp.pid if does not exist then alert check filesystem Ubuntu with path /dev/sda1 if space usage > 90% then alert check filesystem Home with path /dev/sda3 if space usage > 90% then alert check host app_name with address 127.0.0.1 start "/sbin/start app_name" stop "/sbin/stop app_name" if failed port 80 protocol HTTP request /ok with timeout 5 seconds then restart
[Unit] Description=Pro-active monitoring utility for unix systems After=network.target Documentation=man:monit(1) https://mmonit.com/wiki/Monit/HowTo [Service] Type=simple KillMode=process ExecStart=/usr/local/bin/monit -I ExecStop=/usr/local/bin/monit quit ExecReload=/usr/local/bin/monit reload Restart = on-abnormal StandardOutput=null [Install] WantedBy=multi-user.target
With pid-file:
check process nginx with pidfile /var/run/nginx.pid start program = "/bin/systemctl start nginx" stop program = "/bin/systemctl stop nginx"
If process without pid-file:
check program MyApp with path "systemctl --quiet is-active MyApp" if status != 0 then ...
There is a way to tell systemd to create pid-file if process doesn't to it itself:
ExecStartPost=/bin/sh -c "echo $MAINPID > /run/myapp.pid"
By matching program name:
check process MyApp matching 'myapp.*' start program = /bin/app stop program = something..
No. Systemd has only basic check if process is running. Imaging that process is stuck. You need some active probes, like HTTP health endpoint.
Systemd has limited capabilities for notifying with OnFailure:
[Service] Restart=always RestartSecs=30 [Unit] OnFailure=...
Ngnix:
server { listen 80; server_name my.server.name; location /monit/ { allow 127.0.0.1; allow 192.0.0.0/8; deny all; proxy_pass http://127.0.0.1:2812; proxy_set_header Host $host; rewrite ^/monit/(.*) /$1 break; proxy_ignore_client_abort on; } }