我有以下 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 语法的其他元素。