When you encounter the message "error connecting to the monit daemon" after running monit status myproc, it typically indicates one of two scenarios:
- The monit daemon isn't running at all
- The HTTP interface isn't properly configured for CLI communication
First, check if the monit service is actually running:
sudo systemctl status monit
# or for older systems:
sudo service monit status
The crucial configuration needed in /etc/monit/monitrc:
set httpd port 2812 and
use address 0.0.0.0 # or 127.0.0.1 for local only
allow 0.0.0.0/0 # or restrict to specific IPs
allow admin:monit # basic authentication
Here's a full monitrc configuration that works with both CLI and HTTP:
# Global settings
set log /var/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
# HTTP interface
set httpd port 2812
use address 127.0.0.1
allow 127.0.0.1
allow admin:password
# Process monitoring example
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
After making changes, always:
sudo monit -t # Test configuration
sudo systemctl restart monit
monit status # Should now work
For systems where HTTP isn't desirable, configure UNIX socket:
set daemon 30 with start delay 5
set httpd unixsocket /var/run/monit.sock
allow unix:root
Then use:
monit -s /var/run/monit.sock status
- Check
/var/log/monit.logfor errors - Verify port 2812 isn't blocked by firewall:
sudo ufw allow 2812 - Ensure SELinux isn't blocking if applicable
When you encounter the "error connecting to the monit daemon" message while running monit status, it's typically because Monit's HTTP interface isn't configured. This behavior persists in modern Monit versions (5.25+), confirming that the 2005 observation remains accurate.
First check if HTTPD is enabled in your config file (usually at /etc/monit/monitrc):
# This should be present:
set httpd port 2812 and
use address localhost
allow localhost
allow admin:monit
Here's a basic setup that enables both monitoring and HTTP access:
set daemon 30 # Check services every 30 seconds
set logfile /var/log/monit.log
set httpd port 2812
use address 127.0.0.1
allow 127.0.0.1
allow admin:password
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
After modifying the configuration:
# Validate config syntax monit -t # Reload configuration monit reload # Now status checks should work monit status nginx
If you can't enable HTTP, consider these approaches:
# 1. Use the summary flag monit summary # 2. Check the status file directly cat /var/lib/monit/state # 3. Use monit in non-daemon mode for testing monit -Iv