Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux nohup 指令詳解:讓程式在後台持續運行、免受登出影響

編輯:Linux 教學

nohup (No Hang Up) 讓指令忽略 SIGHUP (掛斷信號),在終端關閉、用戶登出後仍持續運行,輸出自動導向 nohup.out。是長時間任務、服務啟動的必備工具。

基本語法

nohup command [arg...] &
  • & 讓指令在後台運行 (Shell 作業控制)。
  • 輸出預設寫入 ./nohup.out,不可寫時寫入 $HOME/nohup.out。

常用範例

# 1. 後台運行 Python 腳本
nohup python3 /path/script.py > /var/log/script.log 2>&1 &

# 2. 後台啟動 Java 應用
nohup java -jar app.jar --server.port=8080 &

# 3. 指定輸出檔案
nohup ./long_task.sh > my_output.log 2>&1 &

# 4. 管道配合
nohup find / -name "*.log" -mtime +30 -delete > /var/log/cleanup.log 2>&1 &

作業控制配合

jobs                # 查看當前 Shell 後台作業
fg %1               # 將作業 1 調回前台
bg %1               # 讓暫停作業 1 在後台繼續
kill %1             # 終止作業 1
disown -h %1        # 從 Shell 作業表移除,不再接收 SIGHUP (類似 nohup 效果)

nohup vs & vs disown vs systemd

方式登出後存活輸出管理適用場景
cmd &否 (收到 SIGHUP 終止)終端短暫前台互動
nohup cmd &是nohup.out / 指定檔臨時長時間任務、腳本
disown -h是原終端 (若關閉則丟失)已啟動前台任務轉後台
systemd service是 (系統級)journalctl / 標準輸出生產服務、開機自啟、監控
screen/tmux是 (會話級)虛擬終端緩衝區互動式長時間操作、斷點續傳

進階技巧

  • 重導向標準錯誤:2>&1 合併 stderr 到 stdout,再導向檔案。
  • 追加模式:>> log.txt 2>&1 避免覆蓋歷史日誌。
  • PID 記錄:nohup cmd & echo $! > /var/run/cmd.pid 便後續管理。
  • 限制輸出大小:配合 logrotate 或 rotatelogs。

常見誤區

  • 以為 nohup 會自動守護進程重啟 —— **不會**,進程異常退出需外部監控 (systemd, supervisord, Monit)。
  • 以為 nohup 能讓已經在前台運行的指令免受影響 —— **需配合 Ctrl+Z 暫停、bg、disown -h**。
  • 輸出檔案權限問題導致寫入失敗 —— 確保目錄可寫,或指定 $HOME/nohup.out。
Copyright © Windows教程網 All Rights Reserved