Systemd for voipmonitor service management: Difference between revisions

From VoIPmonitor.org
No edit summary
(Rewrite: konsolidace a vylepšení struktury - zjednodušeno z 384 na 177 řádků)
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{DISPLAYTITLE:Managing the Sniffer Service with systemd}}
{{DISPLAYTITLE:Managing the Sniffer Service with systemd}}
[[Category:Configuration]]
[[Category:Installation]]


'''This guide provides the modern, recommended method for managing the VoIPmonitor sensor service using `systemd`. A properly configured `systemd` unit file ensures that the sensor starts correctly on boot and can be managed reliably with standard system commands.'''
'''This guide covers managing the VoIPmonitor sensor service using systemd on modern Linux distributions.'''


== Overview ==
{{Warning|1='''Always use <code>systemctl</code> commands.''' Do not use the legacy <code>service</code> command as systemd may lose track of the process state.}}
Modern Linux distributions (including recent versions of Debian, Ubuntu, CentOS, RHEL, and AlmaLinux) use `systemd` as the primary service manager. While the legacy `/etc/init.d/voipmonitor` script may still work, creating a dedicated `systemd` unit file is a more robust and reliable approach. It provides better dependency management, process tracking, and integration with system logging.


'''Warning:''' It is strongly recommended to use the `systemctl` command exclusively to manage the service. Using the older `service` command (e.g., `service voipmonitor start`) can cause `systemd` to lose track of the process's state.
== Unit File Configuration ==


== Step 1: Create the systemd Unit File ==
Create <code>/etc/systemd/system/voipmonitor.service</code>:
Create a new service file for VoIPmonitor using a text editor:
<pre>
sudo nano /etc/systemd/system/voipmonitor.service
</pre>


Copy and paste the following content into the file. This template is a modern replacement for the old `init.d` script and calls the binary directly.
<syntaxhighlight lang="ini">
[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
</syntaxhighlight>
 
=== Dependencies ===
 
{| class="wikitable"
|-
! Scenario !! Add to [Unit] section
|-
| '''Local MySQL/MariaDB''' || <code>After=mysql.service</code>
|-
| '''Napatech SmartNIC''' || <code>After=ntservice.service</code><br/><code>Requires=ntservice.service</code><br/><code>Wants=network-pre.target</code><br/><code>Before=network-pre.target</code>
|}
 
== Basic Commands ==
 
<syntaxhighlight lang="bash">
# 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
</syntaxhighlight>
 
== 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 <code>/etc/voipmonitor.conf</code>:
 
<syntaxhighlight lang="ini">
watchdog = yes
watchdog_run_command = systemctl restart voipmonitor
</syntaxhighlight>
 
== Controlling Verbose Output ==
 
By default, VoIPmonitor outputs statistics to syslog every 10 seconds (controlled by <code>-v 1</code> in the init.d script).
 
=== Option 1: Redirect to Dedicated Log (Recommended) ===
 
Add to <code>/etc/rsyslog.conf</code>:
 
<syntaxhighlight lang="rsyslog">
if $programname == 'voipmonitor' then /var/log/voipmonitor.log
& ~
</syntaxhighlight>
 
Then: <code>systemctl restart rsyslog</code>
 
=== Option 2: Disable Statistics Entirely ===
 
{{Warning|This removes valuable diagnostic metrics. Only use if necessary.}}


<pre>
Edit <code>/etc/init.d/voipmonitor</code>, find the <code>ARGS=</code> line, and remove <code>-v 1</code> (or <code>v 1</code>):
[Unit]
 
Description=VoIPmonitor Sniffer Service
<syntaxhighlight lang="text">
Wants=network-online.target
# Before:
After=network-online.target syslog.target
ARGS="-v 1 --config-file /etc/voipmonitor.conf"
 
# After:
ARGS="--config-file /etc/voipmonitor.conf"
</syntaxhighlight>
 
Then: <code>systemctl daemon-reload && systemctl restart voipmonitor</code>
 
== Troubleshooting ==
 
=== Unit File Syntax Errors ===
 
'''Symptom:''' "Assignment outside of section" or "control process exited with error code"


# --- Optional: Add dependencies below if needed ---
'''Fix:''' Check unit file for:
# After=mysql.service mariadb.service      # If the database is on the same server
* Missing section headers (<code>[Unit]</code>, <code>[Service]</code>, <code>[Install]</code>)
# After=ntservice.service                  # If you use Napatech cards
* Typos in directive names
* Missing <code>=</code> signs


[Service]
'''Emergency bypass:'''
Type=simple
<syntaxhighlight lang="bash">
User=root
killall -9 voipmonitor
Group=root
/etc/init.d/voipmonitor start
# Fix unit file, then:
systemctl daemon-reload && systemctl start voipmonitor
</syntaxhighlight>


# The command to start the sniffer.
=== Multiple Instances Running (Duplicate Packets, Corrupted RRD) ===
# The -f flag is important to keep the process in the foreground for systemd.
ExecStart=/usr/local/sbin/voipmonitor -f -c /etc/voipmonitor.conf


# Restart the service automatically if it fails
'''Symptom:''' Duplicate SIP packets in GUI, broken RRD graphs, multiple voipmonitor processes
Restart=on-failure
RestartSec=5s


# It's good practice to define a clean stop command
'''Cause:''' Both systemd unit and init.d wrapper trying to start VoIPmonitor
ExecStop=/bin/kill -s TERM $MAINPID


[Install]
'''Fix:'''
WantedBy=multi-user.target
</pre>


== Step 2: Optional Customizations ==
<syntaxhighlight lang="bash">
The provided template should work for most installations. However, if you have a special setup, you may need to uncomment or add dependency lines in the `[Unit]` section.
# 1. Kill all instances
sudo killall -9 voipmonitor


;If the database runs on the same server:
# 2. Disable init.d wrapper (keeps script but prevents auto-start)
:Uncommenting `After=mysql.service mariadb.service` ensures that VoIPmonitor will only start after the database service is fully up and running.
sudo chmod -x /etc/init.d/voipmonitor


;If you use Napatech hardware acceleration cards:
# 3. Delete corrupted RRD files
:Uncommenting `After=ntservice.service` ensures the Napatech driver service is started before VoIPmonitor attempts to use the card.
sudo rm -f /var/spool/voipmonitor/rrd/*


== Step 3: Reload systemd and Enable the Service ==
# 4. Start via systemd
After creating or modifying the unit file, you must tell `systemd` to reload its configuration.
sudo systemctl enable voipmonitor
<pre>
sudo systemctl start voipmonitor
sudo systemctl daemon-reload
</pre>
Next, enable the service to ensure it starts automatically every time the server boots.
<pre>
sudo systemctl enable voipmonitor.service
</pre>


== Step 4: Managing the Service ==
# 5. Verify single instance
You can now manage the VoIPmonitor sensor using the standard `systemctl` commands.
ps aux | grep "[v]oipmonitor"
</syntaxhighlight>


;To start the service:
{{Note|1=The <code>chmod -x</code> disables the SysV compatibility service that systemd auto-generates from init.d scripts.}}
<pre>sudo systemctl start voipmonitor</pre>


;To stop the service:
=== Connection Failures (Service Running but Not Connecting) ===
<pre>sudo systemctl stop voipmonitor</pre>


;To restart the service after a configuration change:
If <code>systemctl status voipmonitor</code> shows "active (running)" but logs show connection errors, the problem is not systemd-related. See [[Sniffer_distributed_architecture#Troubleshooting|Distributed Architecture Troubleshooting]].
<pre>sudo systemctl restart voipmonitor</pre>


;To check the current status and view recent logs:
== See Also ==
<pre>sudo systemctl status voipmonitor</pre>


;To disable the service from starting on boot:
* [[Sniffer_configuration]] - Full configuration reference
<pre>sudo systemctl disable voipmonitor</pre>
* [[Sniffer_installation]] - Installation guide
* [[Multiple_sniffer_instancies]] - Running multiple sensors on one host


== AI Summary for RAG ==
== AI Summary for RAG ==
'''Summary:''' This guide provides a best-practice tutorial for managing the VoIPmonitor sensor service using `systemd` on modern Linux distributions. It explains why using `systemctl` is superior to the legacy `service` command and `init.d` scripts. The core of the article is a modern, recommended `voipmonitor.service` unit file template that calls the sniffer binary directly with the `-f` flag to run it in the foreground. The guide is structured as a step-by-step process: 1) Creating the `/etc/systemd/system/voipmonitor.service` file. 2) Explaining optional customizations, such as adding dependencies for a local MySQL/MariaDB database or Napatech drivers. 3) Reloading the `systemd` daemon and enabling the service to start on boot with `systemctl daemon-reload` and `systemctl enable`. 4) Listing and explaining the standard `systemctl` commands (`start`, `stop`, `restart`, `status`) for day-to-day service management.
 
'''Keywords:''' systemd, systemctl, service, daemon, init.d, unit file, `voipmonitor.service`, start on boot, enable, restart, status, dependency, `After=`, `Wants=`, `ExecStart`, `Type=simple`
'''Summary:''' Guide for managing VoIPmonitor sensor with systemd. Create unit file at <code>/etc/systemd/system/voipmonitor.service</code> with <code>Type=forking</code> and <code>RemainAfterExit=yes</code>. Key dependencies: add <code>After=mysql.service</code> for local DB only, add <code>After=ntservice.service</code> with <code>Requires=ntservice.service</code> for Napatech cards. Always use <code>systemctl</code> commands (not legacy <code>service</code>). For watchdog integration, set <code>watchdog_run_command = systemctl restart voipmonitor</code> to prevent systemd from showing failed status after watchdog restarts. For multiple instance conflicts (duplicate packets, corrupted RRD), run <code>chmod -x /etc/init.d/voipmonitor</code> 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 <code>-v 1</code> 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:'''
'''Key Questions:'''
* How do I manage the VoIPmonitor sniffer service on a modern Linux system?
* What is the recommended systemd unit file for VoIPmonitor?
* What is the correct `systemd` unit file for VoIPmonitor?
* How do I configure systemd dependencies for MySQL and Napatech?
* How do I make the VoIPmonitor sensor start automatically on boot?
* How do I make VoIPmonitor start automatically on boot?
* Why shouldn't I use the `service voipmonitor start` command?
* Why does systemd show service as failed after watchdog restart?
* How can I make the VoIPmonitor service wait for the MySQL database to be ready before starting?
* How do I fix multiple voipmonitor processes running (duplicate packets, corrupted RRD)?
* What is the difference between an `init.d` script and a `systemd` service file?
* How do I stop init.d and systemd from conflicting?
* How do I check the status and logs of the sniffer service with `systemctl`?
* How do I disable or redirect the verbose statistics output to syslog?

Latest revision as of 16:48, 8 January 2026


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.service
Requires=ntservice.service
Wants=network-pre.target
Before=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

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?