方案選擇
為防止 SSH 會話關閉導致正在啟動並執行命令被中斷,請根據需求選擇以下任一方案。
方案一:使用nohup 與 &命令:適合執行一次性的、無互動的自動化指令碼或命令。
方案二:使用screen工具:適合需要長時間運行、調試,或隨時恢複互動操作的命令。
方案一:使用nohup 與 &命令
nohup 命令可使命令在終端關閉後繼續運行,& 符號可將進程置於後台運行。
將命令置於後台執行。
將輸出及錯誤重新導向至自訂的
[your_log_file]檔案中。sudo nohup [your_command] >[your_log_file] 2>&1 &以後台執行
bash hello.sh並將輸出寫入目前的目錄的新檔案output.log為例,需執行sudo nohup bash hello.sh > output.log 2>&1 &。查看命令輸出內容。
sudo tail -f [your_log_file]結束進程。
重要結束進程會結束命令或任務,請謹慎操作。
查看進程PID。
[your_command]替換為第1步後台執行的指令。sudo ps aux | grep "[your_command]"以執行
sudo nohup bash hello.sh > output.log 2>&1 &為例,需執行sudo ps aux | grep "bash hello.sh"。使用sudo kill [進程PID]>命令結束進程。
方案二:使用 screen工具
安裝screen工具。
Alibaba Cloud Linux、CentOS類型
sudo yum install -y screenDebian、Ubuntu類型
sudo apt-get install -y screen
建立並進入新會話。
[Name]為自訂會話名稱。screen -S [Name]以建立一個名為mysession的會話為例,需執行
sudo screen -S mysession,在新會話中執行命令。在新會話中執行目標任務。
分離會話。
同步選取Ctrl+A+D鍵,分離當前
screen會話,此時進程在SSH用戶端斷開後仍可繼續運行。恢複會話。
查看會話進程PID,用於後續恢複。
sudo screen -lsThere is a screen on: 2046.mytask (Detached) 1 Socket in /run/screen/S-root.樣本中
screen會話進程PID為2046。恢複對背景工作的控制。
[PID]為上一步擷取的PID。sudo screen -r -d [PID]以恢複會話進程PID為2046的會話為例,需執行
sudo screen -r -d 2046。
登出會話。
重要登出會話會結束在此會話中執行命令或任務,請謹慎操作。
[PID]請替換為從4.a擷取的會話進程PID。sudo kill [PID]