web-dev-qa-db-fra.com

Journaux d'impression Systemd dans un fichier journal externe

J'ai le script de service Systemd suivant pour exécuter une application de démarrage Spring.

[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


J'enregistre le script à l'emplacement suivant -

 /etc/systemd/system


J'ai exécuté les commandes suivantes pour exécuter le script de service systemd -

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


Pour vérifier les journaux, je lance la commande -

journalctl -u security.service

et utilisez SHIFT+G pour passer à eof

Je suis capable de vérifier les journaux par les étapes ci-dessus, mais je les veux dans un fichier externe à l'emplacement / home/ubuntu/security, comme security.log
Comment puis-je y parvenir? Quel changement est-ce que je fais dans mon script systemd?

4
Aniruddha Raje

systemd fournit déjà un journal personnalisé pour vous par défaut dans le journal de systemd. Il y redirige automatiquement les noms STDIN et STDOUT, ainsi que la gestion de la croissance et de la rotation des fichiers journaux.

Laissez simplement la redirection du fichier journal en dehors de votre ligne ExecStart=. Pour afficher les journaux générés par votre service, utilisez journalctl -u security.

Voir man journald.conf pour connaître les options de configuration associées et man journalctl pour obtenir plus d'options pour afficher et interroger les données du journal.

La documentation dans man systemd.service explique que la syntaxe de redirection n'est pas prise en charge dans la ligne ExecStart=:

Cette syntaxe est censée être très similaire à la syntaxe Shell, mais seuls les méta-caractères et les extensions décrits dans les paragraphes suivants sont compris. Plus précisément, la redirection à l'aide de "<", "<<", ">" et ">>", les tubes à l'aide de "|", les programmes en cours d'exécution à l'arrière-plan à l'aide de "&" et les autres éléments de la syntaxe du shell ne sont pas pris en charge.

4
Mark Stosberg