Systemd启动Java程序时未向StandardOutput指定路径写入日志问题
systemd启动Java应用不输出日志到指定文件排查步骤
- 检查日志文件读写权限:
/opt目录默认仅root用户有写入权限,你配置的服务运行用户为jvmapps,需要手动给指定日志文件授权:sudo chown jvmapps:jvmapps /opt/log.log /opt/log2.log sudo chmod 644 /opt/log.log /opt/log2.log - 适配systemd版本的日志输出配置:Ubuntu 20.04以下版本的systemd不支持
StandardOutput=file:写法,你可以直接修改ExecStart参数加入重定向逻辑,适配所有版本:
如果你需要日志追加不覆盖,可以把ExecStart=/bin/sh -c '/opt/java/openjdk/jdk-16.0.2/bin/java -jar /opt/StorageWebServer/StorageWebServer.jar > /opt/log.log 2> /opt/log2.log'file:前缀替换为append:。 - 检查Java应用日志配置:如果你的应用内置了log4j、logback等日志框架,默认会将日志输出到框架指定的独立文件,不会输出到stdout/stderr,自然无法被systemd捕获。你可以手动执行以下命令测试控制台是否有日志输出:
如果无输出,需要修改应用日志配置,开启控制台输出功能。sudo -u jvmapps /opt/java/openjdk/jdk-16.0.2/bin/java -jar /opt/StorageWebServer/StorageWebServer.jar - 验证配置生效:修改配置后必须执行
sudo systemctl daemon-reload重载配置,再执行sudo systemctl restart StorageWebServer重启服务。如果仍有问题,可通过journalctl -u StorageWebServer -f查看服务运行日志,排查启动报错、权限报错等问题。
内容的提问来源于stack exchange,提问作者Max B
相关产品推荐
相关产品推荐

