Linuxspicker

Admins kleiner Zettelkasten für die Lösung von Linuxproblemen

Systemd und sqlgrey - Pid_file already exists for running process

Das Greylisting von Sqlgrey ist bei der Spambekämpfung in Verbindung mit Postfix nützlich, auch wenn die Software etwas älter ist. Lästig ist nach der Umstellung auf Systemd bei Debian, dass es keine Systemd-Datei für den Dienst gibt und faktisch weiter von Systemd einfach das alte Init-Script gestartet wird. Bei Restarts kommt es mitunter vor, dass die PID-Datei von Sqlgrey nicht gelöscht wird und der Restart misslingt. Das ist besonders lästig, wenn Sqlgrey beispielsweise durch den Watchdogdienst Monit bei fehlschlagendem Verbindungstest neugestartet wird. Dann kommt es zu solch unschönen Systemdjournaleinträgen:

● sqlgrey.service - LSB: Start/stop the sqlgrey daemon
   Loaded: loaded (/etc/init.d/sqlgrey; generated)
  Drop-In: /etc/systemd/system/sqlgrey.service.d
           └─override.conf
   Active: failed (Result: exit-code) since Thu 2020-11-12 21:47:22 CET; 2min 15s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 1 (limit: 165)
   Memory: 26.1M
   CGroup: /system.slice/sqlgrey.service
           └─972 /usr/bin/perl -w /usr/sbin/sqlgrey --daemonize

Nov 12 21:47:21 linuxspicker.net systemd[1]: Starting LSB: Start/stop the sqlgrey daemon...
Nov 12 21:47:22 linuxspicker.net sqlgrey[4955]: Starting postfix greylisting daemon (sqlgrey): sqlgreyPid_file already exists for running process (972)... aborting
Nov 12 21:47:22 linuxspicker.net sqlgrey[4957]: 2020/11/12-21:47:22 Pid_file already exists for running process (972)... aborting

                                                        at line 142 in file /usr/share/perl5/Net/Server.pm
Nov 12 21:47:22 linuxspicker.net sqlgrey[4957]: 2020/11/12-21:47:22 Server closing!
Nov 12 21:47:22 linuxspicker.net systemd[1]: sqlgrey.service: Control process exited, code=exited, status=1/FAILURE
Nov 12 21:47:22 linuxspicker.net systemd[1]: sqlgrey.service: Failed with result 'exit-code'.
Nov 12 21:47:22 linuxspicker.net systemd[1]: Failed to start LSB: Start/stop the sqlgrey daemon.

Abhilfe kann irgendeine hässliche Lösung mit dem nachträglichen Löschen der PID-Datei sein. Eleganter geht es mit Systemd und einer Dropin-Datei. Dazu muss in /etc/systemd/system/sqlgrey.service.d eine Datei namens override.conf mit zumindest folgendem Inhalt angelegt werden:

[Unit]
After=network-online.target mariadb.service
Wants=mariadb.service

[Service]
Type=forking
PIDFile=/run/sqlgrey.pid

Der Pfad nach PIDFile muss dann natürlich dem in der Konfigurationsdatei von Sqlgrey in /etc/sqlgrey/sqlgrey.conf beim Punkt pidfile = /run/sqlgrey.pid entsprechen. Die Einträge im Bereich [Unit] stellen zusätzlich sicher, dass Sqlgrey erst nach der Datenbanksoftware — in diesem Fall Mariadb — gestartet wird. Die Datei override.conf kann auch durch den Befehl systemctl edit sqlgrey erzeugt werden. Dazu muss man sich allerdings mit den Tastaturkürzeln des joe-editors auseinandersetzen.

Nach dem Abspeichern den Befehl systemctl daemon-reload ausführen und eine liegengebliebene pid-Datei sollte nicht mehr das Problem darstellen. Der Neustart des Service mit service sqlgrey restart sollte dann zu folgendem Ergebnis führen:

● sqlgrey.service - LSB: Start/stop the sqlgrey daemon
   Loaded: loaded (/etc/init.d/sqlgrey; generated)
  Drop-In: /etc/systemd/system/sqlgrey.service.d
           └─override.conf
   Active: active (running) since Thu 2020-11-12 21:49:43 CET; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 5392 ExecStart=/etc/init.d/sqlgrey start (code=exited, status=0/SUCCESS)
 Main PID: 5394 (sqlgrey)
    Tasks: 2 (limit: 165)
   Memory: 49.1M
   CGroup: /system.slice/sqlgrey.service
           ├─ 972 /usr/bin/perl -w /usr/sbin/sqlgrey --daemonize
           └─5394 /usr/bin/perl -w /usr/sbin/sqlgrey --daemonize

Nov 12 21:49:42 linuxspicker.net systemd[1]: Starting LSB: Start/stop the sqlgrey daemon...
Nov 12 21:49:43 linuxspicker.net sqlgrey[5394]: Process Backgrounded
Nov 12 21:49:43 linuxspicker.net sqlgrey[5394]: 2020/11/12-21:49:43 sqlgrey (type Net::Server::Multiplex) starting! pid(5394)
Nov 12 21:49:43 linuxspicker.net sqlgrey[5392]: Starting postfix greylisting daemon (sqlgrey): sqlgrey.
Nov 12 21:49:43 linuxspicker.net systemd[1]: Started LSB: Start/stop the sqlgrey daemon.
Nov 12 21:49:43 linuxspicker.net sqlgrey[5394]: Binding to UNIX socket file "/var/spool/postfix/var/run/sqlgrey.sock"
Nov 12 21:49:43 linuxspicker.net sqlgrey[5394]: Setting gid to "125 125"
Nov 12 21:49:43 linuxspicker.net sqlgrey[5394]: Setting uid to "119"

Alle Aktionen sind natürlich nur als root-user beispielsweise per sudo möglich.

Vermutlich ist aber ein Wechsel zur Komplettlösung rspamd schon lange überfällig.


Stichworte: , , , , ,
Kategorien: ,


Kommentare

Keine Kommentare

Kommentare

Geben Sie Ihren Kommentar hier ein. * Eingabe erforderlich. Sie müssen die Vorschau vor dem Absenden ansehen.