我不是系統工程師(我是軟體開發人員)。我必須執行一個Java應用程式(一個可以執行的。檔案)在 Linux 機器(Centos 7)上。我正在透過 SSH 連接到 shell。該應用程式位於罐格式化並實現批次應用程式並包含其調度程序。
我必須在遠端伺服器上在後台運行它,以便在我退出 shell 後它仍然運行。
我執行此命令是為了在背景運行我的應用程式:
java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar &
然後我點擊了CTRL+C在我的鍵盤上,以便再次獲得 shell 上的鍵盤提示符。
這裡是第一個奇怪的行為:我再次獲得 shell 提示字元和插入命令的可能性,但如果應用程式記錄某些內容,它就會出現在 shell 上。為什麼?我預計我的應用程式仍在後台運行。
無論如何,我現在在 shell 中提示此命令,以檢查我的應用程式是否正在運行:
[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23307 15.3 1.6 4871172 418980 pts/0 Sl 10:23 0:22 java -Xms256m -Xmx1024m -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar
webadmin 23522 0.0 0.0 112812 980 pts/0 S+ 10:25 0:00 grep --color=auto java
是的,我的應用程式似乎正確運行(第一個)。
然後我關閉與 shell 的連接,再次登入並再次執行先前的命令,但現在我得到了:
[email protected] [~/zzz-import-data-batch]# ps aux | grep java
xxx 23919 0.0 0.0 112812 980 pts/0 S+ 10:27 0:00 grep --color=auto java
正如您所看到的,我斷開與外殼的連接後,當我進行新的登入時,我的批次應用程式似乎沒有運行(事實上我的作業應用程式沒有運行)。
怎麼了?我缺什麼?在後台運行 java jar 批次應用程式的好方法是什麼?
答案1
您需要在 shell 終止之前取消後台作業與 shell 的關聯。
當你輸入 時command &
,系統給了你一個job-id,看起來像“[1] 25177”,哪裡1
是job-id。
您現在應該使用 否認命令。對於上面的例子,這將是:
disown 1
或做所有的工作(因為你只有一項):
disown
有關更多信息,請參見示例 Linux / Unix:disown 指令。