最近要寫一個程序來刷新一下memcached中的緩存信息,於是寫一個java main來去進行清理,如果在command line直接運行程序,如
- 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之類打斷程序的動行。如:
- 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文件中, 我們也可以手動指定一個參數來規定日志文件的輸出地點,如:
- 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.
- 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執行的程序呢? 只需要一句命令:
- jobs
jobs
那么就會列出所有nohup執行的后台程序,並且每個程序前面都有個編號。 如果想將某個程序調回前台控制,只需要 fg + 編號即可。
- fg 1
fg 1
那么編號為1的程序就會調回到前台,這時如果要終止程序,只需ctrl + c 即可退出程序。