nohup — 讓程序在登出後繼續執行

讓程序在終端機關閉後繼續執行,免受 SIGHUP 影響。

語法

nohup 指令 [引數...] [&]

常用選項

選項 說明 範例
&(加在結尾) 將程序放到背景執行(幾乎必加) nohup ./server.sh &
重導向輸出 將輸出改寫到自訂日誌而非 nohup.out nohup ./app.sh > app.log 2>&1 &

使用範例

範例 1:啟動背景任務並安全登出

啟動後記下 PID,即使關閉 SSH 連線程序也會繼續執行。

$ nohup ./long-task.sh > task.log 2>&1 &
[1] 12345
echo $! 可取得剛啟動程序的 PID,方便之後用 kill 停止。
範例 2:啟動 Python 伺服器並保持執行

在遠端機器上啟動服務並保持執行,即使 SSH 斷線也不停止。

$ nohup python3 server.py --port 8000 > server.log 2>&1 &\necho "PID: $!"
PID: 34567
範例 3:查看執行中的 nohup 程序

重新登入後用 ps 或 pgrep 找到之前啟動的程序。

$ ps aux | grep long-task.sh
user   12345  0.5  0.1  task.sh

常見錯誤與排錯

程序仍然在終端機關閉時結束
原因
使用了 nohup 但忘記加 &,程序在前景執行且仍然受 SIGHUP 影響。
解法
一定要加 &:nohup command > output.log 2>&1 &

延伸閱讀