1. 创建 systemd 服务文件
bash
sudo nano /etc/systemd/system/my-python-app.service
服务文件内容:
bash
[Unit]
Description=我的 Python 应用
After=network.target
Wants=network.target
[Service]
Type=simple
User=ubuntu # 改为你的用户名
Group=ubuntu # 改为你的用户组
# 重要:设置工作目录
WorkingDirectory=/home/ubuntu/myapp
# 重要:设置环境变量
Environment="PYTHONPATH=/home/ubuntu/myapp"
Environment="DISPLAY=:0" # 如果需要图形界面
Environment="XAUTHORITY=/home/ubuntu/.Xauthority"
Environment="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus"
# 可选:设置虚拟环境
Environment="PATH=/home/ubuntu/myapp/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# 执行命令(选择一种方式)
ExecStart=/usr/bin/python3 /home/ubuntu/myapp/main.py
# 或使用虚拟环境
# ExecStart=/home/ubuntu/myapp/venv/bin/python /home/ubuntu/myapp/main.py
# 或使用 shell 脚本包装
# ExecStart=/bin/bash /home/ubuntu/myapp/start.sh
# 重启策略
Restart=always
RestartSec=10
# 日志设置
StandardOutput=journal
StandardError=journal
SyslogIdentifier=my-python-app
# 安全设置
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/home/ubuntu/myapp/logs
[Install]
WantedBy=multi-user.target
2. 创建启动脚本
bash
# /home/ubuntu/myapp/start.sh
#!/bin/bash
# 设置环境
export DISPLAY=:0
export XAUTHORITY=/home/ubuntu/.Xauthority
export PYTHONPATH=/home/ubuntu/myapp
# 激活虚拟环境(如果有)
source /home/ubuntu/myapp/venv/bin/activate
# 运行Python脚本
cd /home/ubuntu/myapp
exec /usr/bin/python3 main.py "$@"
3. 启用和管理服务
bash
# 1. 重载 systemd 配置
sudo systemctl daemon-reload
# 2. 启用开机自启
sudo systemctl enable my-python-app.service
# 3. 立即启动服务
sudo systemctl start my-python-app.service
# 4. 检查状态
sudo systemctl status my-python-app.service
# 5. 查看日志
sudo journalctl -u my-python-app.service -f
sudo journalctl -u my-python-app.service --since "2024-01-01" --until "2024-01-02"
# 6. 重启服务
sudo systemctl restart my-python-app.service
# 7. 停止服务
sudo systemctl stop my-python-app.service
# 8. 禁用开机自启
sudo systemctl disable my-python-app.service