You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何远程更新树莓派上持续运行的Python脚本

实现树莓派Python脚本自动更新与重启的轻量方案

结合你的需求(接受5分钟内停机、脚本持续运行、轻量部署),cron定时调用shell脚本+systemd管理服务是最适合的方案,比容器更轻量化,且足够可靠。以下是具体实现步骤:

1. 用systemd管理你的Python脚本

先把脚本注册为systemd服务,这样能方便地启停、自动重启(脚本崩溃时),不用手动找进程ID。

  • 创建systemd服务文件:
sudo nano /etc/systemd/system/mqtt-device.service
  • 写入以下配置(根据你的实际路径修改):
[Unit]
Description=MQTT Device Control Script
After=network.target

[Service]
User=pi  # 树莓派默认用户,根据你的实际用户修改
WorkingDirectory=/home/pi/your-git-repo  # Git仓库的本地路径
ExecStart=/usr/bin/python3 /home/pi/your-git-repo/your-script.py
Restart=always  # 脚本意外退出时自动重启
RestartSec=5  # 重启间隔5秒

[Install]
WantedBy=multi-user.target
  • 启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable mqtt-device.service
sudo systemctl start mqtt-device.service
  • 验证服务状态:
sudo systemctl status mqtt-device.service

2. 编写自动更新的shell脚本

创建一个shell脚本,完成拉取Git更新、判断是否需要重启服务的逻辑。

  • 创建脚本文件:
nano /home/pi/your-git-repo/update-script.sh
  • 写入以下内容(路径同样按需修改):
#!/bin/bash

# 进入Git仓库目录
cd /home/pi/your-git-repo || exit 1

# 拉取远程更新(替换为你的分支名,比如master)
pull_output=$(git pull origin main 2>&1)

# 检查是否有更新
if ! echo "$pull_output" | grep -q "Already up to date."; then
    echo "检测到脚本更新,重启服务..."
    # 停止当前服务
    sudo systemctl stop mqtt-device.service
    # 可选:如果有依赖更新,执行下面的命令
    # pip3 install -r requirements.txt --user
    # 启动新脚本服务
    sudo systemctl start mqtt-device.service
    echo "服务已重启完成"
else
    echo "脚本已是最新版本,无需操作"
fi
  • 给脚本添加执行权限:
chmod +x /home/pi/your-git-repo/update-script.sh

3. 设置cron定时任务

让脚本每5分钟自动运行一次,符合你接受的停机窗口。

  • 编辑当前用户的crontab:
crontab -e
  • 在文件末尾添加一行(修改脚本路径):
*/5 * * * * /home/pi/your-git-repo/update-script.sh >> /var/log/mqtt-update.log 2>&1

解释:

  • */5 * * * *:每5分钟执行一次
  • 日志重定向:把脚本输出写入日志文件,方便后续排查问题

可选优化:用Git Webhook实现即时更新

如果不想等5分钟,想推送代码后立刻更新,可以用Git仓库的webhook(比如GitHub/GitLab的webhook),在树莓派上搭建一个简单的HTTP服务(比如用Flask写个小接口),收到推送请求后触发上述shell脚本。不过这种方式需要树莓派有公网访问能力或内网穿透,比定时任务复杂一点,适合对更新时效性要求更高的场景。

关于容器的说明

确实如你所说,对于单Python脚本的场景,容器属于“大材小用”——需要额外维护容器镜像、配置Docker,增加了部署复杂度,而上述方案足够轻量且满足需求。

内容的提问来源于stack exchange,提问作者Ahoy0865

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:12:53