在linux下利用nohup來后台運行java程序


最近要寫一個程序來刷新一下memcached中的緩存信息,於是寫一個java main來去進行清理,如果在command line直接運行程序,如

Java代碼 復制代碼  收藏代碼
  1. java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest  
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之類打斷程序的動行。如:

Java代碼 復制代碼  收藏代碼
  1. nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest &  
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest &

這樣執行后,nohup會把執行結果中的日志輸出到當前文件夾下面的nohup.out文件中, 我們也可以手動指定一個參數來規定日志文件的輸出地點,如:

Java代碼 復制代碼  收藏代碼
  1. nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.FirstTest [color=red]> /home/logs/firstlog.log[/color] &  
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.

Java代碼 復制代碼  收藏代碼
  1. nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.SecondTest [color=red]> /home/logs/secondlog.log[/color] &  
nohup java -cp "./WEB-INF/lib/*:./WEB-INF/classes" cn.limaoyuan.SecondTest [color=red]> /home/logs/secondlog.log[/color] &

那么我們怎么調出所有用nohup執行的程序呢? 只需要一句命令:

Java代碼 復制代碼  收藏代碼
  1. jobs  
jobs

那么就會列出所有nohup執行的后台程序,並且每個程序前面都有個編號。 如果想將某個程序調回前台控制,只需要 fg + 編號即可。

Java代碼 復制代碼  收藏代碼
  1. fg 1  
fg 1

那么編號為1的程序就會調回到前台,這時如果要終止程序,只需ctrl + c 即可退出程序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM