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?
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.