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 停止它)

暫停與恢復

如果你正在跑一個程式(前景),想把它暫停丟到背景:

  1. Ctrl + Z (暫停,程式會停住)
  2. 輸入 bg (Background,讓程式在背景繼續跑)

總結

  • 臨時跑一下,不想卡住視窗:加 &
  • 跑很久,怕斷線或要登出:用 nohup ... &
  • 這是正式的服務:請乖乖寫 Systemd Service