我有一个永远运行的 jar(带有套接字监听线程的无限循环),需要它始终在后台运行。例如:“java -jar test.jar”我该怎么做?提前致谢!
答案1
有几种方法:
附加
&
在后面。但是,使用这种方法,如果您关闭启动该程序的终端,该程序仍然会被终止。启动一个
screen
会话,并在其中启动程序;您可以分离screen
会话并关闭终端。稍后,您可以再次连接到会话,并发现自己回到控制台,就像您一直在那里一样。但是,您需要在运行程序之前启动一个屏幕会话,如果您忘记了这样做,您将无能为力。从 shell 中使用
disown
作业控制。这将从 tty 中分离任务,并且当 tty 关闭时,您的程序不会终止。但是,我认为没有任何方法可以重新附加被放弃的作业。
答案2
我一直使用的命令行提示符可以在长时间运行后持续到注销,它是“nohup”,因此在你的情况下是
nohup java -jar test.jar &
& 很重要,这样您就可以运行另一个 shell。我相信这不会持续到重启。
答案3
如果“始终”是指它在机器启动时启动,则需要将其作为启动时脚本的一部分启动。最简单的方法是添加
java -jar test.jar >/dev/null 2>&1 &
到/etc/rc.local
(或者/dev/null
用您最喜欢的日志文件替换)。
更好的方法是制作一个init.d
在适当的运行级别启动的脚本(例如,您可能不希望它在运行级别 0、1 或 6 上启动)。这样,如果它死机了,您还可以让它自动重新启动,并且有一个更好的界面来暂时停止它。
小例子http://www.howtoforge.com/forums/archive/index.php/t-3628.html
详细解释http://developer.novell.com/wiki/index.php/Writing_Init_Scripts
答案4
你可以在 Linux 的命令行末尾添加“&”符号来在后台运行任何任务,例如
java -jar test.jar &