Systemd for voipmonitor service management
This guide covers managing the VoIPmonitor sensor service using systemd on modern Linux distributions.
⚠️ Warning: Always use systemctl commands. Do not use the legacy service command as systemd may lose track of the process state.
Unit File Configuration
Create /etc/systemd/system/voipmonitor.service:
[Unit]
Description=VoIPmonitor sniffer
After=syslog.target network.target
# Add mysql.service only if DB is local (see Dependencies below)
[Service]
Type=forking
RemainAfterExit=yes
TimeoutSec=5min
KillMode=process
GuessMainPID=no
IgnoreSIGPIPE=no
SuccessExitStatus=5 6
ExecStart=/etc/init.d/voipmonitor start
ExecStop=/etc/init.d/voipmonitor stop
PrivateTmp=false
[Install]
WantedBy=multi-user.target
Dependencies
| Scenario | Add to [Unit] section |
|---|---|
| Local MySQL/MariaDB | After=mysql.service
|
| Napatech SmartNIC | After=ntservice.serviceRequires=ntservice.serviceWants=network-pre.targetBefore=network-pre.target
|
Basic Commands
# After any unit file changes
systemctl daemon-reload
# Enable auto-start on boot
systemctl enable voipmonitor
# Start/Stop/Restart
systemctl start voipmonitor
systemctl stop voipmonitor
systemctl restart voipmonitor
# Check status
systemctl status voipmonitor
Watchdog Integration
When using the internal watchdog with systemd, configure it to restart via systemctl. Otherwise, systemd will incorrectly report the service as "failed" after a watchdog-triggered restart.
Add to /etc/voipmonitor.conf:
watchdog = yes
watchdog_run_command = systemctl restart voipmonitor
Controlling Verbose Output
By default, VoIPmonitor outputs statistics to syslog every 10 seconds (controlled by -v 1 in the init.d script).
Option 1: Redirect to Dedicated Log (Recommended)
Add to /etc/rsyslog.conf:
if $programname == 'voipmonitor' then /var/log/voipmonitor.log
& ~Then: systemctl restart rsyslog
Option 2: Disable Statistics Entirely
⚠️ Warning: This removes valuable diagnostic metrics. Only use if necessary.
Edit /etc/init.d/voipmonitor, find the ARGS= line, and remove -v 1 (or v 1):
# Before:
ARGS="-v 1 --config-file /etc/voipmonitor.conf"
# After:
ARGS="--config-file /etc/voipmonitor.conf"
Then: systemctl daemon-reload && systemctl restart voipmonitor
Troubleshooting
Unit File Syntax Errors
Symptom: "Assignment outside of section" or "control process exited with error code"
Fix: Check unit file for:
- Missing section headers (
[Unit],[Service],[Install]) - Typos in directive names
- Missing
=signs
Emergency bypass:
killall -9 voipmonitor
/etc/init.d/voipmonitor start
# Fix unit file, then:
systemctl daemon-reload && systemctl start voipmonitor
Multiple Instances Running (Duplicate Packets, Corrupted RRD)
Symptom: Duplicate SIP packets in GUI, broken RRD graphs, multiple voipmonitor processes
Cause: Both systemd unit and init.d wrapper trying to start VoIPmonitor
Fix:
# 1. Kill all instances
sudo killall -9 voipmonitor
# 2. Disable init.d wrapper (keeps script but prevents auto-start)
sudo chmod -x /etc/init.d/voipmonitor
# 3. Delete corrupted RRD files
sudo rm -f /var/spool/voipmonitor/rrd/*
# 4. Start via systemd
sudo systemctl enable voipmonitor
sudo systemctl start voipmonitor
# 5. Verify single instance
ps aux | grep "[v]oipmonitor"
ℹ️ Note: The chmod -x disables the SysV compatibility service that systemd auto-generates from init.d scripts.
Connection Failures (Service Running but Not Connecting)
If systemctl status voipmonitor shows "active (running)" but logs show connection errors, the problem is not systemd-related. See Distributed Architecture Troubleshooting.
See Also
- Sniffer_configuration - Full configuration reference
- Sniffer_installation - Installation guide
- Multiple_sniffer_instancies - Running multiple sensors on one host
AI Summary for RAG
Summary: Guide for managing VoIPmonitor sensor with systemd. Create unit file at /etc/systemd/system/voipmonitor.service with Type=forking and RemainAfterExit=yes. Key dependencies: add After=mysql.service for local DB only, add After=ntservice.service with Requires=ntservice.service for Napatech cards. Always use systemctl commands (not legacy service). For watchdog integration, set watchdog_run_command = systemctl restart voipmonitor to prevent systemd from showing failed status after watchdog restarts. For multiple instance conflicts (duplicate packets, corrupted RRD), run chmod -x /etc/init.d/voipmonitor to disable the init.d wrapper, delete RRD files, and restart via systemd. For verbose log spam (every 10 seconds), either redirect via rsyslog or remove -v 1 from the init.d ARGS line.
Keywords: systemd, systemctl, voipmonitor.service, unit file, Type=forking, RemainAfterExit, After=mysql.service, Napatech, ntservice, daemon-reload, watchdog, watchdog_run_command, multiple instances, duplicate packets, corrupted RRD, chmod -x, verbose output, syslog spam, -v 1, rsyslog
Key Questions:
- What is the recommended systemd unit file for VoIPmonitor?
- How do I configure systemd dependencies for MySQL and Napatech?
- How do I make VoIPmonitor start automatically on boot?
- Why does systemd show service as failed after watchdog restart?
- How do I fix multiple voipmonitor processes running (duplicate packets, corrupted RRD)?
- How do I stop init.d and systemd from conflicting?
- How do I disable or redirect the verbose statistics output to syslog?