Munin kann so eingestellt werden, dass die Grafiken und HTML-Dateien nicht alle fünf Minuten sondern nur auf Anforderung bzw. beim Abrufen der jeweiligen Webseite erzeugt werden. Zuständig dafür sind die Einstellungen cgi_strategy und html_strategy in /etc/munin/munin.conf. Munin benötigt dazu zwei FastCGI-Schnittstellen, welche idealerweise über einen Socket angesprochen werden. Früher konnte man das Problem lösen, indem man an passender Stelle mit spawn-fcgi die entprechenden FastCGI-Schnittstellen über Sockets bereitstellte. Eine Lösungsmöglichkeit war z.B. folgende:
/usr/bin/spawn-fcgi -s /var/run/munin/fcgi-graph.sock -U www-data -u www-data -g www-data /usr/lib/munin/cgi/munin-cgi-graph /usr/bin/spawn-fcgi -s /var/run/munin/fcgi-html.sock -U www-data -u www-data -g munin /usr/lib/munin/cgi/munin-cgi-html
In Zeiten von systemd läßt sich das nun eleganter bewerkstelligen.
Sockets in systemd definieren
Für Munin müssen zwei Sockets definiert werden. Über einen Socket erfolgt die Kommunikation zum Erstellen der Grafiken, über den anderen die Kommunikation zur Erstellung der HTML-Dateien. Unter /etc/systemd/system werden dazu zwei Dateien erstellt:
[Unit] Description=Munin CGI Graph Socket [Socket] SocketUser=www-data SocketGroup=www-data SocketMode=0600 ListenStream=/var/run/munin/fcgi-graph.sock [Install] WantedBy=sockets.target
[Unit] Description=Munin CGI HTML Socket [Socket] SocketUser=www-data SocketGroup=www-data SocketMode=0600 ListenStream=/var/run/munin/fcgi-html.sock [Install] WantedBy=sockets.target
Startprogramm für Munin-FastCGI
Damit die Munin-FastCGI-Programm zusammen mit dem obigen Sockets gestartet werden können ist ein kleines Skript erforderlich. Folgendes Skript legt man am besten unter /usr/local/sbin ab:
#!/bin/bash set -e if [ "${LISTEN_PID}" != $$ ]; then echo >&2 "file descriptors not for us, pid not matching: '${LISTEN_PID}' != '$$'" exit 255 fi if [ "${LISTEN_FDS}" != "1" ]; then echo >&2 "Requires exactly one socket passed to fastcgi, got: '${LISTEN_FDS:-0}'" exit 255 fi unset LISTEN_FDS # move socket from 3 to 0 exec 0<&3 exec 3<&- # spawn fastcgi backend exec "$@"
Nun muss dieses Skript noch ausführbar gemacht werden:
chmod +x /usr/local/sbin/systemd-spawn-fcgi.sh
Unit-Files für Munin-FastCGI
Anschließend müssen zwei Unit-Files (ebenfalls unter /etc/systemd/system) erstellt werden, welche die zu startenden FastCGI-Prozesse und die Abhängigkeiten zu den zuvor definierten Sockets festlegen:
[Unit] Description=Munin CGI Graph Service After=network.target Requires=munin-cgi-graph.socket [Service] User=www-data Group=www-data StandardOutput=null StandardError=syslog ExecStart=/usr/local/sbin/systemd-spawn-fcgi.sh /usr/lib/munin/cgi/munin-cgi-graph [Install] WantedBy=multi-user.target
[Unit] Description=Munin CGI HTML Service After=network.target Requires=munin-cgi-html.socket [Service] User=www-data Group=www-data StandardOutput=null StandardError=syslog ExecStart=/usr/local/sbin/systemd-spawn-fcgi.sh /usr/lib/munin/cgi/munin-cgi-html [Install] WantedBy=multi-user.target
Aktivierung
Zum Schluss müssen die Sockets und Units aktiviert und gestartet werden:
systemctl enable munin-cgi-graph.socket systemctl enable munin-cgi-graph.service systemctl enable munin-cgi-html.socket systemctl enable munin-cgi-html.service systemctl start munin-cgi-graph.service systemctl start munin-cgi-html.service
Beide FastCGI-Prozesse sollten jetzt ausgeführt werden, was man mit folgenden Kommandos überprüfen kann:
# systemctl status munin-cgi-*.service ● munin-cgi-graph.service - Munin CGI Graph Service Loaded: loaded (/etc/systemd/system/munin-cgi-graph.service; enabled) Active: active (running) since Mi 2016-06-15 13:56:26 CEST; 4h 22min ago Main PID: 8745 (munin-cgi-graph) CGroup: /system.slice/munin-cgi-graph.service └─8745 /usr/bin/perl -T /usr/lib/munin/cgi/munin-cgi-graph ● munin-cgi-html.service - Munin CGI HTML Service Loaded: loaded (/etc/systemd/system/munin-cgi-html.service; enabled) Active: active (running) since Mi 2016-06-15 13:58:08 CEST; 4h 20min ago Main PID: 8816 (munin-cgi-html) CGroup: /system.slice/munin-cgi-html.service └─8816 /usr/bin/perl -T /usr/lib/munin/cgi/munin-cgi-html
Zum Abschluss bleibt noch ein Entfernen der alten Starts von spawn-fcgi und (falls nicht mehr benötigt) ein apt purge spawn-fcgi
.
(Angepasst aus dem spawn-fcgi-Wiki für Munin.)