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>&1
wirkungslos 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/systemd
aufruft ./etc/init.d/exim4
Es findet keine Delegation statt. Ihre rc
Skripte 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.service
Dienst ansehen. Diese befindet sich entweder im Journal oder in der syslog
von Ihnen so eingerichteten Variante, dass sie vom Journal stammt.
Für Letzteres tun Sie, was für Ihre syslog
Variante angemessen ist. Für Ersteres beachten Sie, dass systemctl
Ihnen die letzten Journaleinträge für den Dienst angezeigt werden, wenn Sie ihn ausführen
systemctl status exim4.servicemit den entsprechenden Berechtigungen (Superuser oder Mitgliedschaft in der
systemd-journal
Gruppe). Sie können auch die Journaleinträge für den Dienst seit dem letzten Bootstrap anzeigen (sofern das Journal noch nicht rotiert wurde) mitjournalctl -u exim4.service -e -b
Exim unter ordnungsgemäßem Servicemanagement
Ironischerweise kann diese ganze rc
Skriptmonstrosität durch einige ziemlich kurze Service- und Socket-Einheiten vom Typ exim4-queue.service
, [email protected]
+ exim4-smtp-relay.socket
und [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 -bdf
Option 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 -bd
verwenden würde .-bs
-bdf
Weiterführende Literatur
- https://unix.stackexchange.com/a/233581/5132
- Jonathan de Boyne Pollard (2014).Ein Vergleich von ausgeführten Skripts und Serviceeinheiten.. Häufig gestellte Fragen.
- Jonathan de Boyne Pollard (2014). "Gehen Sie nicht davon aus, dass „Vordergrund“ „Debug-Modus“ bedeutet.'. Zu vermeidende Fehler beim Entwurf von Unix-Dämon-Programmen. Häufig gestellte Fragen.