将Java控制台应用程序作为守护程序运行(后台)

我开发了一个Java控制台应用程序,在启动时打开一个控制台窗口并保持在前台,我想在后台启动该应用程序。

现在我通过此命令行启动应用程序:

java -jar myapp.jar 

有没有办法实现这种行为? 它足以改变命令行参数,或者我需要对我的代码进行一些更改?

答案取决于操作系统。

 *nix:  & Windows: (opens a new console): start  Windows: (doesn't open a new console): start /b  

如果你在基于unix的任何东西中执行此操作,那么你可以追加到最终将生成一个新线程并保持它在后台运行。

 java -jar myapp.jar & 

如果你真的只想让它在后台运行, java -jar myapp.jar &将完成这项工作。 这样,它会在shell关闭时死掉,但你可以继续使用你的shell。

如果你真的希望它作为守护进程运行, nohup java -jar myapp.jar &将完成这项工作。 这样,当shell关闭时它将继续存在。

如果您希望这是可靠的,您可以准备一个init脚本或upstart作业定义 ,或者通过Vixie cron(8) @reboot说明符运行它以使其在启动时启动。

鉴于您使用的是Windows,您可能会考虑使用Java Service Wrapper 。 我过去曾在一个项目中使用它。