在Ubuntu上将Python脚本部署为系统服务并确保更新生效
要在Ubuntu上部署Python脚本为系统服务,并确保脚本更新后能成功按新版本执行,你需要按照以下步骤操作:
1. 创建系统服务文件
首先创建一个systemd服务单元文件:
sudo nano /etc/systemd/system/wechat_msg_service.service
内容如下(根据你的实际路径调整):
[Unit]
Description=WeChat Message Service
After=network.target
[Service]
User=cat # 使用你的用户名
Group=cat
WorkingDirectory=/home/cat/deepseek/deepseekapi
ExecStart=/home/cat/deepseek/deepseekapi/myenv/bin/python /home/cat/deepseek/deepseekapi/wechat_msg_service.py
Restart=always
RestartSec=10
Environment=PATH=/home/cat/deepseek/deepseekapi/myenv/bin:/usr/bin:/bin
Environment=PYTHONPATH=/home/cat/deepseek/deepseekapi
[Install]
WantedBy=multi-user.target
2. 确保脚本更新后服务重启
要使脚本更改后自动生效,你有几种选择:
方案1:手动重启服务(推荐)
每次修改脚本后执行:
sudo systemctl restart wechat_msg_service
方案2:使用inotify自动重启(高级)
安装inotify-tools并创建一个监视脚本:
sudo apt install inotify-tools
创建监视脚本watch_service.sh:
#!/bin/bash
while inotifywait -e modify -e move -e create -e delete /home/cat/deepseek/deepseekapi/wechat_msg_service.py; do
sudo systemctl restart wechat_msg_service
echo "脚本已更改,服务已重启 - $(date)"
done
然后让这个脚本在后台运行。
3. 设置服务权限和启用
# 设置文件权限
sudo chmod 644 /etc/systemd/system/wechat_msg_service.service
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启用服务开机启动
sudo systemctl enable wechat_msg_service
# 启动服务
sudo systemctl start wechat_msg_service
# 检查状态
sudo systemctl status wechat_msg_service
4. 验证脚本更新是否生效
- 修改你的Python脚本
- 重启服务:sudo systemctl restart wechat_msg_service
- 检查日志确认是否使用新版本:
- bash
- 复制
- 下载
- journalctl -u wechat_msg_service -f
5. 日志管理
建议在服务文件中添加日志重定向:
StandardOutput=append:/var/log/wechat_msg_service.log
StandardError=append:/var/log/wechat_msg_service.error.log
然后创建日志文件并设置权限:
sudo touch /var/log/wechat_msg_service.log
sudo touch /var/log/wechat_msg_service.error.log
sudo chown cat:cat /var/log/wechat_msg_service*
关键注意事项
- 虚拟环境路径:确保ExecStart中的Python路径指向你的虚拟环境中的Python解释器
- 文件权限:确保服务用户(cat)有脚本目录的读取权限
- 依赖项:所有Python依赖必须在虚拟环境中安装
- 环境变量:如果脚本依赖特定环境变量,需要在服务文件中声明
这样设置后,每次你修改脚本并重启服务,系统就会使用更新后的脚本版本执行。