Systemd 将日志打印到外部日志文件

Systemd 将日志打印到外部日志文件

我有以下 Systemd 服务脚本来运行 Spring Boot 应用程序-

[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


我将脚本保存在以下位置 -

 /etc/systemd/system


我运行以下命令来运行 systemd 服务脚本 -

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


为了检查日志,我发出以下命令 -

journalctl -u security.service

并使用SHIFT+G滚动到 eof

我可以通过上述步骤检查日志,但我希望将它们放在外部文件中/主页/ubuntu/安全, 作为安全日志
我该如何实现它?我在 systemd 脚本中做了哪些更改?

答案1

systemd 已在 systemd 日志中默认为您提供自定义日志。它会自动将 STDIN 和 STDOUT 重定向到那里,并处理日志文件的增长和轮换。

只需将日志文件重定向放在行外即可ExecStart=。要查看服务生成的日志,请使用journalctl -u security

man journald.conf参阅相关配置选项以及man journalctl查看和查询日志数据的更多选项。

文档中man systemd.service解释说,该行不支持重定向语法ExecStart=

此语法旨在与 shell 语法非常相似,但只能理解以下段落中描述的元字符和扩展。具体而言,不支持使用“<”、“<<”、“>”和“>>”的重定向、使用“|”的管道、使用“&”在后台运行程序以及 shell 语法的其他元素。

相关内容