java - 将 JAR 作为服务运行时未显示日志

标签 java linux service jar daemon

我有一个胖 JAR ( Spring Boot ),如果我开始使用 java -jar filename.jar 创建两个日志文件:一个应用程序日志(通常是标准输出)和另一个创建一个每次访问网络服务器时都会输入。

现在,当我使用 /etc/init.d/ 中的文件将此作为服务启动时(请参阅下面的代码段),我没有创建任何日志文件(/opt/service-name/log 仅在应用程序启动前显示标准输出)。这不是权限问题 - 我尝试用没有权限的用户启动服务,但它没有启动。我尝试了 find/logfile.log 但没有成功。

daemon --user=root --pidfile=/var/run/service-name.pid java -jar /opt/service-name/filename.jar > /opt/service-name/log 2>&1 & echo $!

为什么没有创建日志文件有什么想法吗?

最佳答案

尝试先将 stderr 重定向到 stdout,然后再将 stdout 重定向到文件,例如

daemon --user=root --pidfile=/var/run/service-name.pid java -jar /opt/service-name/filename.jar 2>&1 >/opt/service-name/log & echo $!

此外,& echo $! 部分在我看来很可疑。如果我读 specs正确地,单个 & 可能会导致 echo $! 在守护程序返回之前返回,这意味着您将得到错误的 pid。你想运行 && echo $! 还是 ; echo $! 而不是?

关于java - 将 JAR 作为服务运行时未显示日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22206586/

相关文章:

c++ - Windows 10 中的 Windows 服务安装/卸载

Android 服务和线程中运行的重复性任务

java - 占位符的 setImageDrawable 与 setBackground

java - 声明式 OSGi 服务

Java 7 : Fork/Join Framework

linux - 如何查找具有特定名称的所有子目录并删除其内容(而不是删除目录本身)

regex - 复制与范围内的数字模式匹配的文件

c - 如何丢弃子进程的标准输出但保留父进程的标准输出?

java - 为什么 assertEquals(new Object[] {"abc"}, new Object[] {"abc"});不失败?

java - Spring MVC。为什么 JSP 页面看不到资源?