要在 Raspberry Pi 上讓 gpio_redis_buffer.py 在背景持續運行,即使您登出 SSH 連線,最可靠和標準的方法有幾種。
以下我將介紹三種常見且實用的方法,並推薦使用 systemd,因為它是現代 Linux 系統(包括 Raspberry Pi OS)管理服務的標準方式,能確保程式在開機時自動啟動,並在崩潰時自動重啟。
🚀 方法一:使用 systemd 服務 (最推薦)
systemd 是 Linux 系統初始化和服務管理的工具。將您的 Python 腳本註冊為 systemd 服務,可以確保它:
開機自啟: 每次 Pi3 重啟後自動運行。
持續運行: 即使程式崩潰,
systemd也能嘗試重新啟動它。背景運行: 獨立於您的使用者會話運行。
步驟 1: 建立服務檔案 (gpio_reader.service)
使用 sudo nano 建立一個名為 gpio_reader.service 的檔案,放在 /etc/systemd/system/ 目錄下:
sudo nano /etc/systemd/system/gpio_reader.service
將以下內容複製貼上。請務必根據您的實際情況修改 User、WorkingDirectory 和 ExecStart 路径:
[Unit]
Description=GPIO to Redis Buffer Service
After=network.target redis.service
[Service]
# 執行使用者:建議使用非 root 用戶,例如預設的 'pi'
User=pi
# 設定工作目錄:您的 Python 檔案所在位置
WorkingDirectory=/home/pi/your_project_folder/
# 啟動指令:使用您的虛擬環境中的 python3 執行您的腳本
# 如果您使用了虛擬環境 (venv),請務必使用 venv 內部的 python3 路徑!
# 範例路徑: /home/pi/your_project_folder/venv/bin/python3
ExecStart=/home/pi/your_project_folder/venv/bin/python3 gpio_redis_buffer.py
# 程式崩潰後自動重啟
Restart=always
# 設定重啟延遲
RestartSec=10
[Install]
WantedBy=multi-user.target
(請將 /home/pi/your_project_folder/ 替換為您實際的專案路徑。)
步驟 2: 啟用並啟動服務
重新載入
systemd配置:Bashsudo systemctl daemon-reload啟用服務(設定開機自啟):
Bashsudo systemctl enable gpio_reader.service立即啟動服務:
Bashsudo systemctl start gpio_reader.service
步驟 3: 檢查服務狀態與日誌
檢查運行狀態:
Bashsudo systemctl status gpio_reader.service您應該會看到
Active: active (running)。查看日誌輸出:
Bashsudo journalctl -u gpio_reader.service -f這會實時顯示您的 Python 程式(
gpio_redis_buffer.py)的print()輸出,方便您確認程式是否正常讀取和寫入 Redis。
⚡ 方法二:使用 nohup (簡單快速,但功能較少)
nohup (No Hang Up) 可以在背景運行指令,並且防止程式在 SSH 連線斷開時終止。
# 確保您在專案目錄下
cd /home/pi/your_project_folder/
# 使用 nohup 執行腳本,並將輸出導向到 logfile.log
# 注意:這裡假設您已啟用虛擬環境或已全域安裝套件。
nohup python3 gpio_redis_buffer.py > logfile.log 2>&1 &
# 輸出範例:[1] 12345 (這是背景進程ID)
>:將標準輸出重新導向到logfile.log。2>&1:將標準錯誤輸出也導向到標準輸出(即logfile.log)。&:將整個命令在背景執行。
停止程式:
您需要找到進程 ID (PID) 並手動停止它:
查找 PID:
Bashps aux | grep gpio_redis_buffer.py # 找到類似 pi 12345 ... 的那一行,12345 就是 PID停止進程:
Bashkill 12345
📦 方法三:使用 screen 或 tmux (適合除錯和手動操作)
screen 或 tmux 允許您建立一個虛擬終端會話,即使您斷開 SSH 連線,該會話也會保持運行。您可以隨時重新連接回來看程式的即時輸出。
使用 screen 步驟
安裝(如果未安裝):
Bashsudo apt install screen啟動一個新的
screen會話:Bashscreen -S gpio_session在新的會話中執行程式:
Bashpython3 gpio_redis_buffer.py分離會話(讓它在背景運行): 按下 Ctrl + A,然後按 D。 您現在可以安全地登出 SSH 了。
重新連線回會話:
Bashscreen -r gpio_session
總結: 對於長期可靠的背景服務,強烈建議使用 systemd。
沒有留言:
張貼留言