ubuntu如何开机运行一个python3脚本?

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
相关推荐
科技每日热闻几秒前
电气设备综合维保服务商怎么选?从预防性维护到数字化运维,看懂五个关键能力——企业选择维保合作伙伴,不能只看“坏了能不能修”,更要看能否覆盖资产与系统的长期运营
大数据·运维·人工智能
最强小杰37 分钟前
Claude Opus 4.8 调用报 529 怎么办?并发限制触发过载——退避策略与降级方案完整指南
运维·网络·python·ai
我科绝伦(Huanhuan Zhou)1 小时前
磐维数据库(PanWeiDB)日常运维命令总结
运维·数据库
深盾科技_Virbox1 小时前
软许可、加密锁和云许可混合使用时,授权接口应该怎么统一?
运维·网络·安全
逐流人1 小时前
Redis内存数据库:从数据类型到集群部署
linux·运维·数据库·redis·缓存·云计算
。1 小时前
【无标题】
linux·服务器·负载均衡·lvs
励志师code1 小时前
Kubernetes 集群节点生命周期管理实战:从扩容、调度管控到证书续期
运维·docker·容器·kubernetes·gpu算力·kubelet
weixin_416667961 小时前
linux ping命令详解
linux·运维·php
润滑卫士1 小时前
NAS 1638 油液清洁度等级:检测方法、影响因素与控制策略
运维
硅基手札1 小时前
【Linux 内核专栏 17】进程间通信 IPC(上)— 管道·信号·System V IPC·mmap·文件锁
linux·运维·服务器·stm32·单片机·mcu