在Ubuntu上将Python脚本部署为系统服务并确保更新生效

liftword1周前 (05-02)技术文章10

要在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. 验证脚本更新是否生效

  1. 修改你的Python脚本
  2. 重启服务:sudo systemctl restart wechat_msg_service
  3. 检查日志确认是否使用新版本:
  4. bash
  5. 复制
  6. 下载
  7. 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*

关键注意事项

  1. 虚拟环境路径:确保ExecStart中的Python路径指向你的虚拟环境中的Python解释器
  2. 文件权限:确保服务用户(cat)有脚本目录的读取权限
  3. 依赖项:所有Python依赖必须在虚拟环境中安装
  4. 环境变量:如果脚本依赖特定环境变量,需要在服务文件中声明

这样设置后,每次你修改脚本并重启服务,系统就会使用更新后的脚本版本执行。

相关文章

超全攻略:用 pip 一键升级所有 Python 包

宝子们,你是否在为一个个升级 Python 包而烦恼?今天就给大家分享用 pip 升级所有 Python 包的多种方法,赶紧码住!注意事项升级依赖包可能会让你的应用程序出问题,所以在操作之前,最好用...

Python小技巧:如何批量更新已安装的库?

众所周知,升级某个库(假设为 xxx),可以用pip install --upgrade xxx 命令,或者简写成pip install -U xxx 。如果有多个库,可以依次写在 xxx 后面,以空...

主编推荐 | Gurobi 并行计算的设置和操作(附代码)

『运筹OR帷幄』原创作者:运筹OR帷幄编者按实际应用问题往往具有较高的计算复杂度,而优化算法难以在实际中落地的主要瓶颈就在于无法满足实际问题对计算时间的苛刻要求。然而近年来随着计算力的蓬勃发展,并行计...

升级到PyTorch 2.0的技巧总结(pytorch的最新版本)

来源:DeepHub IMBA本文约6400字,建议阅读12分钟在本文将演示 PyTorch 2.0新功能的使用,以及介绍在使用它时可能遇到的一些问题。PyTorch 2.0 发布也有一段时间了,大家...

提升 Python 代码水平的 5 个方法

这是原始函数:from datetime import datetime def is_legal_age(dob_str): """Checks if a pers...

Python pip升级及升级失败解决方案

本教程用于Python pip升级及失败解决方案首先查看脚本pip show pip我已经升级到了最新的版本安装其他模块过程中出现下面提示,便说明你需要升级pipYou are using pip v...