Linux 背景執行與排程 (nohup, &, jobs)
有時候我們只想跑一個耗時的 Script (例如爬蟲、備份),不想一直開著終端機視窗,也不需要寫成完整的 Systemd Service。 這時可以用 Shell 內建的背景執行功能。
1. 放到背景執行 (&)
在指令最後面加一個 &。
python3 crawler.py &
程式會立刻在背景執行,你會拿到一個 Job ID 和 PID。
缺點:如果你登出或關閉終端機,這個程式通常還是會被殺掉 (收到 SIGHUP 信號)。
2. 登出繼續跑 (nohup)
nohup (No Hang Up) 可以讓程式忽略 SIGHUP 信號,確保你登出後它繼續跑。
通常會搭配 & 一起用。
nohup python3 crawler.py &
預設輸出會被寫到 nohup.out 檔案中。
3. 管理背景工作
查看背景工作 (jobs)
jobs
把工作拉回前景 (fg)
fg %1
(把 Job 1 拉回前景,這時你可以按 Ctrl+C 停止它)
暫停與恢復
如果你正在跑一個程式(前景),想把它暫停丟到背景:
- 按
Ctrl + Z(暫停,程式會停住) - 輸入
bg(Background,讓程式在背景繼續跑)
總結
- 臨時跑一下,不想卡住視窗:加
& - 跑很久,怕斷線或要登出:用
nohup ... & - 這是正式的服務:請乖乖寫 Systemd Service