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 &