近期在學校伺服器執行程式,但是每當到了晚上11點就會斷網,無法登入終端,伺服器上執行的程式也隨之結束,有沒有什麼方法,能夠在關閉終端後,伺服器上的程式仍然執行呢?當再次開啟終端後,又如何檢視程式的執行進度呢?當想手動結束該程式時,又該如何操作呢?
通過查閱網上的資料,發現了一種行之有效的方法。那就是轉變程式執行的命令,借助nohup和&命令的聯用來解決這個問題。
首先我們來看看nohup和&命令各自的作用
nohup
&
基於nohup和&各自的缺點,如果單獨進行使用,並不方便,因此我們將它們結合在一起使用,這樣便可以很好的解決我們的上述問題。
命令聯用: nohup command &
下面以乙個例子來說明這兩個命令的聯合使用方法
要在伺服器上永久執行test.py程式,直到結束,我們的方法是,使用如下命令
nohup python -u test.py > log.file 2>&1 &
注釋:
log.file 注意有》號,是將command的輸出重定向到log.file檔案,即輸出內容不列印到螢幕上,而是輸出到log.file檔案中。(檔名可自定義,如output.log等)當你成功地提交程序以後,就會顯示出乙個程序號,可以用它來監控該程序,或殺死它。
監控程序
ps -ef | grep 程序號
殺死程序
kill -9 程序號1 程序號2 程序號3 ...
當你想實時檢視程式的執行進度時,可以執行命令
tail -f log.file
下面給出幾點補充
為避免賬戶非正常退出或者結束的時候程式終止,在使用nohup命令後台執行命令之後,建議使用exit正常退出當前賬戶,這樣才能保證命令一直在後台執行。
參考資料
nohup命令: linux後台執行程式並實時檢視輸出
linux後台執行、掛起、恢復程序相關命令
nohup後台執行hive任務
伺服器相關操作
redis啟動 usr local bin redis server redis關閉 redis cli shutdown 自己寫的乙個新增到自啟動的指令碼,可以用如下命令重啟動 service redis restart chmod 755 etc init.d redis 新增指令碼執行許可權 ...
伺服器操作相關筆記
1.1.1 啟動 停止 啟動sudo systemctl start firewalld檢視防火牆狀態 sudo systemctl status firewalld停止 sudo systemctl stop firewalld禁用 sudo systemctl disable firewalld...
伺服器相關
123.56.45.143 公網 self 172.17.74.6 私網 123.57.243.62 scp r 使用scp命令 scp home work source.txt work 192.168.0.10 home work 把本地的source.txt檔案拷貝到192.168.0.10機...