systemd:如何将标准输出重定向到日志文件

systemd:如何将标准输出重定向到日志文件

我有一个系统服务:

[Unit]
Description=My application

[Service]
ExecStart=/bin/java myapp.jar
Type=simple
User=photo

有一个选项:标准输出=但我不明白如何使用它写入文件。 https://www.freedesktop.org/software/systemd/man/systemd.exec.html

我原本希望将文件路径放在某处,但文档讨论了套接字和文件描述符。似乎它需要更多的配置而不仅仅是该关键字。

文件路径放在哪里? 我找不到任何该用途的示例

谢谢

答案1

使用:

[Unit]
Description=My application

[Service]
ExecStart=/usr/bin/java -jar myapp.jar
Type=simple
User=photo
StandardOutput=file:/var/log/logfile

如此处记录的:https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

请注意,这样每次服务重新启动时日志文件内容都会被覆盖。StandardOutput/Errorsystemd 指令不支持附加到文件。

如果您想在服务重新启动之间维护文件日志并仅向其附加新的记录行,请改用:

[Unit]
Description=My application

[Service]
ExecStart=/usr/bin/sh -c 'exec /usr/bin/java -jar myapp.jar'
Type=simple
User=photo

exec意味着shell程序将被/bin/java设置重定向后的程序替换,而不需要分叉。所以和/bin/java直接运行之后不会有什么区别ExecStart=

答案2

如果您的应用程序是Python脚本,您还需要设置

Environment=PYTHONUNBUFFERED=1

否则,在刷新缓冲区之前您将看不到任何日志消息。

相关内容