@Sauerland: Domain Master = yes hat nichts gebracht. Hänger trat trotzdem auf.
Zur weiteren Analyse habe ich mir jetzt den Source Code des nmbd von git.samba.org geholt und analysiert. Meine Erkenntnisse:
- nmbd installiert gleich beim Start einen SIGTERM Handler. Wenn dieser gerufen wird, dann erfolgt unmittelbar danach der Aufruf von terminate, was die Log-Ausgabe aus dem Gutfall zur Folge hat (Got SIGTERM: going down...).
- Der asyncdns Prozess wird in zwei Fällen gestartet:
- Beim Start von nmbd
- In einem zyklischen Test, der prüft, ob der asyncdns Prozess noch läuft. Ist dies nicht der Fall, wird er neu gestartet
Diese Vorgänge habe ich anhand der Version 4.7.10 analysiert, die Leap 15.0 verwendet. Die fraglichen Codestellen sind aber auch im aktuellen master nicht geändert. Jetzt versuche ich, daraus ein paar Schlüsse zu ziehen:
- Der nmbd bekommt im Schlechtfall kein SIGTERM, denn sonst würde ich die Logausgabe der Signal Handlers sehen
- Allerdings stirbt im Schlechtfall der asyncdns Prozess, denn dieser wird über den oben genannten zyklischen Test neu gestartet. Es handelt sich dabei nicht um den Neustart des gesamten nmbd, denn dabei wären noch andere Logmeldungen zu sehen.
- Also könnte man annehmen, dass aus irgendeinem komischen Grund das SIGTERM Signal nicht an den nmbd Daemon geht, sondern an dessen Child-Prozess asyncdns.
Ich habe aber keine Ahnung, wie das zustande kommen soll. Wie genau merkt sich systemd, an welchen Prozess das SIGTERM zugehen hat? Wo ist überhaupt aufgeführt, wie die Prozesse zu beenden sind? Ich habe bisher nur /etc/systemd/system/multi-user.target.wants/nmb.service gefunden, und da stehen nur Anweisungen für Start und Reload. Wo steht, wie gestoppt wird? Wo merkt sich systemd die PIDs der laufenden Services?
Zur Vollständigkeit diese Datei:
[Unit]
Description=Samba NMB Daemon
After=network.target
[Service]
Type=notify
NotifyAccess=all
Environment=KRB5CCNAME=/run/samba/krb5cc_samba
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS
ExecReload=/usr/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Alles anzeigen