Wie leite ich die Standardausgabe und Standardfehlerausgabe eines Daemons mit Start-Stop-Daemon(8) um?

Wie leite ich die Standardausgabe und Standardfehlerausgabe eines Daemons mit Start-Stop-Daemon(8) um?

Ich verwende Debian 8 Jessie.

Ich habe die Debugging-Funktion eines Daemons aktiviert, die den Daemon veranlasst, Debugging-Informationen auf stdout und/oder stderr auszugeben. Wie kann ich start-stop-daemon(8), wie von aufgerufen /lib/lsb/init-functions, dazu bringen, stdout und stderr des Daemons in meine Debugging-Protokolldatei umzuleiten /root/log?

Das scheint >/root/log 2>&1wirkungslos zu sein. Ich nehme an, das macht Sinn, da start-stop-daemon(8)es sich nicht um eine Shell handelt. Wie soll ich jedenfalls die Standardausgabe und Standardfehlerausgabe des Daemons umleiten?

[Der Daemon ist zufällig exim4(8), aber das ist für meine Frage, soweit ich weiß, nicht relevant. LSB delegiert die Verwaltung des Daemons offensichtlich an Systemd; das könnte, soweit ich weiß, indirekt relevant sein.]

Antwort1

Der Versuch, magische Optionen durch die verschiedenen Schichten von Shell-Skripten zu leiten, ist auf einem systemd-Linux-Betriebssystem der völlig falsche Ansatz.

systemdbereitsprotokolliert die Standardausgaben/-fehler von Diensten, die vom „sysv“-Dienstgenerator automatisch generiert werden, wie dies hier der Fall ist. Der „sysv“-Dienstgenerator hat ein exim4.service(irgendwo unter ) erstellt, das Ihren als Dienst /run/systemdaufruft ./etc/init.d/exim4

Es findet keine Delegation statt. Ihre rcSkripte sind nicht in erster Linie für den Dienst verantwortlich. Sie werden lediglich als praktische Proxys dafür ausgeführt.

Sie müssen sich also die bereits erfasste Protokollausgabe für den exim4.serviceDienst ansehen. Diese befindet sich entweder im Journal oder in der syslogvon Ihnen so eingerichteten Variante, dass sie vom Journal stammt.

Für Letzteres tun Sie, was für Ihre syslogVariante angemessen ist. Für Ersteres beachten Sie, dass systemctlIhnen die letzten Journaleinträge für den Dienst angezeigt werden, wenn Sie ihn ausführen

systemctl status exim4.service
mit den entsprechenden Berechtigungen (Superuser oder Mitgliedschaft in der systemd-journalGruppe). Sie können auch die Journaleinträge für den Dienst seit dem letzten Bootstrap anzeigen (sofern das Journal noch nicht rotiert wurde) mit

journalctl -u exim4.service -e -b

Exim unter ordnungsgemäßem Servicemanagement

Ironischerweise kann diese ganze rcSkriptmonstrosität durch einige ziemlich kurze Service- und Socket-Einheiten vom Typ exim4-queue.service, [email protected]+ exim4-smtp-relay.socketund [email protected]+ ersetzt werden.exim4-smtp-submission.socket

Beachten Sie auch, dass es eine Lüge ist, dass exim „Vordergrund“ und „Debug“/„verbose“ verwechselt. Seine -bdfOption ist ausdrücklich die nicht „dämonisierende“ Version von , obwohl man, um es als „socket-aktivierten“ Dämon pro Verbindung aufzurufen (wie in den Beispielen in der weiteren Lektüre), wo die Service-Management-Tools den Abhörsocket handhaben, ohnehin anstelle von -bdverwenden würde .-bs-bdf

Weiterführende Literatur

verwandte Informationen