在GNU / Linux上运行Java httpd服务器作为服务

我有内置grizzly http服务器的Java应用程序。 而且我无法运行它,无论是前台还是systemd的服务。

开始后它正在closures。 我错过了什么吗?

如果我从bash运行shell仍然打开 – everythink是好的:

[root@Test-LAPP02 RL_acskidd] java -jar RestListener-3.3-jar-with-dependencies.jar Oct 24, 2017 5:00:37 PM org.glassfish.grizzly.http.server.NetworkListener start INFO: Started listener bound to [192.168.18.41:1177] Oct 24, 2017 5:00:37 PM org.glassfish.grizzly.http.server.HttpServer start INFO: [HttpServer] Started. Oct 24, 2017 5:00:38 PM org.glassfish.grizzly.http.server.NetworkListener start INFO: Started listener bound to [192.168.18.41:1188] Oct 24, 2017 5:00:38 PM org.glassfish.grizzly.http.server.HttpServer start INFO: [HttpServer-1] Started. 

但是,如果我尝试以systemd服务启动它(甚至在命令结束时在前台),它在启动后立即停止:

 [root@Test-LAPP02 RL_acskidd]# systemctl start rl_acskidd Oct 24 17:08:29 Test-LAPP02 Rest Listener ACSKIDD[1826]: Oct 24, 2017 5:08:29 PM org.glassfish.grizzly.http.server.NetworkListener start Oct 24 17:08:29 Test-LAPP02 Rest Listener ACSKIDD[1826]: INFO: Started listener bound to [192.168.18.41:1177] Oct 24 17:08:29 Test-LAPP02 Rest Listener ACSKIDD[1826]: Oct 24, 2017 5:08:29 PM org.glassfish.grizzly.http.server.HttpServer start Oct 24 17:08:29 Test-LAPP02 Rest Listener ACSKIDD[1826]: INFO: [HttpServer] Started. Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: Oct 24, 2017 5:08:31 PM org.glassfish.grizzly.http.server.NetworkListener start Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: INFO: Started listener bound to [192.168.18.41:1188] Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: Oct 24, 2017 5:08:31 PM org.glassfish.grizzly.http.server.HttpServer start Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: INFO: [HttpServer-1] Started. Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: Oct 24, 2017 5:08:31 PM org.glassfish.grizzly.http.server.NetworkListener shutdownNow Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: INFO: Stopped listener bound to [192.168.18.41:1177] Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: Oct 24, 2017 5:08:31 PM org.glassfish.grizzly.http.server.NetworkListener shutdownNow Oct 24 17:08:31 Test-LAPP02 Rest Listener ACSKIDD[1826]: INFO: Stopped listener bound to [192.168.18.41:1188] Oct 24 17:08:31 Test-LAPP02 systemd[1]: Received SIGCHLD from PID 1826 (java). Oct 24 17:08:31 Test-LAPP02 systemd[1]: Child 1826 (java) died (code=exited, status=0/SUCCESS) Oct 24 17:08:31 Test-LAPP02 systemd[1]: Child 1826 belongs to rl_acskidd.service Oct 24 17:08:31 Test-LAPP02 systemd[1]: rl_acskidd.service: main process exited, code=exited, status=0/SUCCESS 

这是我的单位档案:

 [Unit] Description=Rest Listener After=network-online.target [Service] Type=service User=nobody SyslogIdentifier=Rest Listener WorkingDirectory=/opt/RL_acskidd ExecStart=/usr/bin/java -jar RestListener-3.3-jar-with-dependencies.jar [Install] WantedBy=multi-user.target 

我search了这个问题,并且看到Java应用程序应该用“作为服务运行”function编写,但是我也看到很多人仍然可以用系统单元运行它。

我尝试了各种ExecStart =选项来模拟shell,像这样:

 ExecStart=/bin/bash -c "/usr/bin/java -jar RestListener-3.3-jar-with-dependencies.jar" 

但是还是没有运气。 应该看哪里来解决这个问题? 感谢您的答案!

你的问题是通过在你的文件上运行systemd-analyze verifyfind的,揭示了这个错误:

systemd-analyze verify ./foo.service [/home/mark/tmp/foo.service:6] Failed to parse service type, ignoring: service

请检查man systemd.service并为您的服务select正确的Type=值。

尝试启动服务后,务必检查journalctljournalctl -u your-service-name是否存在错误。