日期:2014-05-16  浏览次数:20794 次

在linux下利用nohup来后台运行java程序
最近要写一个程序来刷新一下memcached中的缓存信息,于是写一个java main来去进行清理,如果在command line直接运行程序,如
java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest

有人说要最后加一个&即可,可是我没有弄成功,况且linux提供了更好的方法。

这样虽然使java main正确运行,但是会占据你的一个ssh窗口,如果要有多个java main同时运行,那么你又要另启动一个ssh窗口来去以类似的方法运行另一个java main,那么有没有更好的方法来解决这种需求呢?答案是肯定的,在linux系统中可以利用nohup来执行任何命令,并把命令自动调到linux后台运行,不锁定当前ssh窗口,也不会被ctrl + c,alt + F4之类打断程序的动行。如:
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest &

这样执行后,nohup会把执行结果中的日志输出到当前文件夹下面的nohup.out文件中,
我们也可以手动指定一个参数来规定日志文件的输出地点,如:
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest [color=red]> /home/logs/firstlog.log[/color] &

这样日志就会输出在/home/logs/firstlog.log文件里。
如果我们想执行多个java main,那么我们只需要以同样的方式去执行其他的java main.
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.SecondTest [color=red]> /home/logs/secondlog.log[/color] &

那么我们怎么调出所有用nohup执行的程序呢?
只需要一句命令:
jobs

那么就会列出所有nohup执行的后台程序,并且每个程序前面都有个编号。
如果想将某个程序调回前台控制,只需要 fg + 编号即可。
fg 1

那么编号为1的程序就会调回到前台,这时如果要终止程序,只需ctrl + c 即可退出程序。