通常使用ssh連線後,當關閉ssh時,通常正在執行的程式都會中斷,
為了讓需要長時間執行的程式可以持續執行,
因此需要透過背景執行來延續
有兩種方法可以實現此需求: nohup、screen
$ vi backup.sh
$ chmod +x backup.sh
&
不能省略)$ nohup ./backup.sh > foo.out 2> foo.err &
sudo ls
,執行啥都不重要,只是為了提權。指令 | 說明 |
---|---|
nohup <command> & |
將指定命令在背景執行nohup :避免關閉ssh就終止& :背景執行 |
ctrl + Z |
(不常用)將『目前』的工作丟到背景中『暫停』。 可配合 jobs 查到工作編號,透過 bg %n 將指定編號的工作恢復執行 |
jobs |
查看目前背景執行清單 |
fg %j |
把背景工作拿到前景處理,%j 表示jobs 的編號 j 的工作項目 |
bg %j |
將暫停的任務開始運行,%j 表示jobs 的編號 j 的工作項目 |
$ command &
$ nohup command &
nohup <執行的command> &
為何nohup後面還要加上&
?
nohup
:把SIGHUP訊號攔截並且避免程式因此而中止&
:讓程式在背景執行因背景執行後就看不到輸出結果,
因此建議儲存到檔案中,
可參考上方指令,
有兩個地方可將輸出儲存到檔案,
兩個位置擇一即可
寫入指令有兩種,擇一即可,在指定位置的最後面加上即可
OOOO >> log.txt 2>&1
OOOO > foo.out 2> foo.err
關閉現有ssh,重新連線,
重新登入後,執行指令jobs
沒看到任務,
不過可以看ps -aux | grep backup
看到任務正在執行
因我的腳本會產生log,
查看log大小發現有持續在增加,
確認本方法是可行的
要在關閉 PuTTY 後,讓 MySQL 還原程序在背景繼續執行,可以使用 screen
這個工具。以下是具體步驟:
screen
screen
。如果出現 "bash: screen: command not found" 類似的訊息,表示尚未安裝。使用以下指令安裝:sudo apt-get install screen
screen
screen
指令來啟動一個新的 screen sessionscreen
視窗中,執行你的指令。screen
sessionCtrl + a
,然後放開,再按下 d
。這會將目前的 screen
視窗放到背景執行,並與 PuTTY 的連線中斷。 PuTTY 視窗會顯示 "detached from tty",表示已成功分離。screen -ls
screen
視窗,以及它們的 ID。screen
視窗,輸入以下指令,將 xxxxx
替換為你要回到的視窗 ID:screen -r xxxxx
screen
視窗後,可以檢視指令運行狀況。exit
退出該窗口。screen -ls
查看所有後台窗口,最前面的數字是pid,使用kill xxxxx
指令關閉程序 (xxxxx
替換為你要關閉的程序)。這樣就能確保程序在你關閉 PuTTY 後仍然可以繼續執行
指令 | 用途 |
---|---|
screen -ls | 這會顯示所有正在執行的screen視窗,以及它們的ID(ID的最前面數字是pid) |
screen -r [screen ID / PID] | 回到上一個或指定的screen視窗 |
按下 Ctrl + a ,然後放開,再按下 d |
將目前的 screen 視窗放到背景執行 |
exit | 結束當前screen |
https://blog.gtwang.org/linux/linux-nohup-command-tutorial/
https://cancerpio.medium.com/linux指令懶人包-nohup-redirecting-output等常用指令-71a0bec0a38