it-swarm.com.de

Systemd druckt Protokolle in eine externe Protokolldatei

Ich verwende das folgende Systemd-Dienstskript, um eine Spring-Boot-Anwendung auszuführen.

[Unit]
Description=Upstart for Security
After=network.target network-online.target
Wants=network-online.target

[Service]
User=root
WorkingDirectory=/home/ubuntu/security
ExecStart=/usr/bin/Java -classpath Java -Dspring.profiles.active=stage -jar /home/ubuntu/security/security-0.0.1-SNAPSHOT.jar > /home/ubuntu/security/security.log 2>&1
SuccessExitStatus=143
Restart=always
RestartSec=120s

[Install]
WantedBy=multi-user.target


Ich speichere das Skript an folgendem Ort -

 /etc/systemd/system


Ich habe die folgenden Befehle ausgeführt, um das systemd-Dienstskript auszuführen -

1. Sudo systemctl enable security.service -or- Sudo systemctl daemon-reload
2. Sudo systemctl status security.service 
3. Sudo systemctl start security.service


m Protokolle zu überprüfen, feuere ich den Befehl -

journalctl -u security.service

und scrollen Sie mit SHIFT+G zu eof

Ich kann die Protokolle mit den oben genannten Schritten überprüfen, möchte sie jedoch in einer externen Datei am Speicherort / home/ubuntu/security als security.log speichern
Wie kann ich das erreichen? Welche Änderung nehme ich in meinem systemd-Skript vor?

4
Aniruddha Raje

systemd stellt Ihnen bereits standardmäßig ein benutzerdefiniertes Protokoll im systemd-Journal zur Verfügung. Sowohl STDIN als auch STDOUT werden dort automatisch umgeleitet und das Wachstum und die Drehung von Protokolldateien werden behandelt.

Lassen Sie die Umleitung der Protokolldatei einfach außerhalb Ihrer ExecStart= -Zeile. Verwenden Sie journalctl -u security, um die von Ihrem Dienst generierten Protokolle anzuzeigen.

Siehe man journald.conf für verwandte Konfigurationsoptionen und man journalctl für weitere Optionen zum Anzeigen und Abfragen der Protokolldaten.

In den Dokumenten in man systemd.service wird erläutert, dass die Umleitungssyntax in der Zeile ExecStart= nicht unterstützt wird:

Diese Syntax soll der Shell-Syntax sehr ähnlich sein, es werden jedoch nur die in den folgenden Absätzen beschriebenen Metazeichen und Erweiterungen verstanden. Insbesondere werden die Umleitung mit "<", "<<", ">" und ">>", Pipes mit "|", die Ausführung von Programmen im Hintergrund mit "&" und andere Elemente der Shell-Syntax nicht unterstützt.

4
Mark Stosberg