在linux服務器上運行Jar文件時通常的方法是:
$ java -jar test.jar //這種方式特點是ssh窗口關閉時,程序中止運行.或者是運行時沒法切出去執行其他任務
jar在后台運行的方法:
方法一:
$ nohup java -jar test.jar & //nohup 意思是不掛斷運行命令,當賬戶退出或終端關閉時,程序仍然運行 //當用 nohup 命令執行作業時,缺省情況下該作業的所有輸出被重定向到nohup.out的文件中 //除非另外指定了輸出文件。
方法二:
$ nohup java -jar test.jar >temp.txt & //這種方法會把日志文件輸入到你指定的文件中,沒有則會自動創建
jobs命令和 fg命令:
$ jobs //那么就會列出所有后台執行的作業,並且每個作業前面都有個編號。 //如果想將某個作業調回前台控制,只需要 fg + 編號即可。 $ fg 2
查看某端口占用的線程的pid
netstat -nlp |grep :8080
出現:nohup: ignoring input and redirecting stderr to stdout
nohup java -jar test.jar >temp.txt & 改成 nohup java -jar test.jar >temp.txt 2>&1 &
解決linux環境下nohup: redirecting stderr to stdout問題
我的啟動命令是這樣的:
nohup bin/startManagedServer.sh myserver htp://192.168.0.1 -Xms2048m -Xmx2048m > logs/myserver.out &現在指行這個命令,會給我產生兩個文件,一個中logs/myserver.out,另一個是nohup.out文件。
怎樣才能讓它不產生nohup.out文件呢。
網上搜了半天,據說好象可以把后面的 “&” 改成 “2>&1 &”,於是把啟動命令改成如下:
nohup bin/startManagedServer.sh myserver htp://192.168.0.1 -Xms2048m -Xmx2048m > logs/myserver.out 2>&1 &再次執行,問題解決。
解釋如下:
2>
表示把標准錯誤(stderr)重定向,標准輸出(stdout)是1。
尖括號后面可以跟文件名,或者是&1, &2,分別表示重定向到標准輸出和標准錯誤。
2> &1
1> &2
2> stderr.log
1> stdout.log