我有一个永远运行的 jar(带有套接字侦听线程的无限循环)并且需要它始终在后台运行。一个例子是:“java -jar test.jar”我该怎么做?提前致谢!
小智 13
我一直用于长时间运行以持续通过注销的命令行提示是“nohup”,因此在您的情况下是
nohup java -jar test.jar &
Run Code Online (Sandbox Code Playgroud)
& 很重要,因此您可以运行另一个 shell。我相信这不会持续到重启。
几种方式:
附加&
在后面。但是,使用它,如果您关闭启动程序的终端,程序仍将终止。
启动一个screen
会话,并启动里面的程序;您可以分离screen
会话并关闭终端。稍后,您可以再次连接到会话并发现自己回到控制台,就好像您一直在那里一样。但是,您需要在运行程序之前启动一个屏幕会话,如果您忘记这样做,您将无能为力。
disown
从 shell使用作业控制。这会将任务与您的 tty 分离,并且您的程序不会在 tty 关闭时终止。但是,我认为没有任何方法可以重新附加一份被剥夺身份的工作。
小智 7
如果“始终”是指它在机器启动时启动,则需要将其作为启动时脚本的一部分启动。这样做的肮脏方法是添加
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 上的大解释
小智 5
java -jar test.jar &
Run Code Online (Sandbox Code Playgroud)
& 运算符将强制进程在后台运行,您可以随后运行“top”命令来查看它是否正在运行。