ubuntu20.04使用systemd服务设置python程序开机自启动

1. 使用 systemd 服务设置开机自启动

  1. 假设已经有一个可执行的python程序,然后用一个sh脚本去启动python程序,正常情况使用挂起的方式nohup启动,日志输出到指定文件:

    sudo touch run.sh
    sudo chmod 777 run.sh

sh文件内容如下,-u可以把print的打印也输出到nohup.log文件中,使用./run.sh即可在后台运行python程序:

复制代码
#! /bin/bash
nohup /usr/bin/python3 -u test.py > nohup.log 2>&1 &
  1. 在/etc/systemd/system目录下创建一个service文件,文件内容如下

    [Unit]
    Description=My Python Program
    After=network.target

    [Service]
    Type=simple
    ExecStart=/path/to/your/sh/run.sh
    WorkingDirectory=/path/to/working/directory
    User=your_user
    Group=your_group
    Environment="PYTHONPATH=/path/to/python/lib"
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target

  2. 重新加载 systemd 配置:

    sudo systemctl daemon-reload

设置开机自启服务:

复制代码
sudo systemctl enable my_program.service

立即启动服务:

复制代码
sudo systemctl start my_program.service

查看服务状态

复制代码
sudo systemctl status my_program.service
  1. 查看系统日志, -f 可以查看实时日志

    journalctl -f -u your_service_name.service

  2. 系统日志太多时,可以删除旧日志,比如清除1天之前的日志

    journalctl --vacuum-time=1d

在 Ubuntu 20 中使用 systemd 服务运行 Python 程序时,systemd 有自己的日志管理机制,不会直接生成 nohup.out 文件,而是将服务的输出重定向到系统日志中

  1. 可能遇到'permission denied'的问题,导致无法生成nohup.out文件,也可能生成空的nohup.out文件,直到程序遇到错误,才会生成out文件然后把错误日志输出

2. 建议直接在service文件中运行python程序,不使用nohup,另外配置日志输出

  1. 使用绝对路径
  2. nohup不适合开机启动:nohup主要用于在交互式shell中运行命令,使其在后台运行并忽略挂起(HUP)信号。在开机启动脚本中,你通常不需要nohup,因为这些脚本本身就是在系统启动时以非交互式方式运行的。

service文件内容如下

复制代码
[Unit]
Description=My Python Program
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 -u /path/to/your/python_program.py
WorkingDirectory=/path/to/working/directory
StandardOutput=file:/home/to/yourfile.log
StandardError=file:/home/to/yourfilerror.log
User=your_user
Group=your_group
Restart=on-failure
Environment="PYTHONPATH=/path/to/python/lib"

[Install]
WantedBy=multi-user.target

3. 停止删除服务

  1. 禁用并停止服务

    复制代码
     sudo systemctl stop your_service_name.service
     sudo systemctl disable your_service_name.service
  2. 删除服务文件(可选):

    复制代码
     sudo rm /etc/systemd/system/your_service_name.service
相关推荐
君顾14 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生4 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
问天_观心5 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
洋洋不叫杨杨5 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
阿童木写作5 小时前
跨境图片翻译工具推荐:批量处理视频字幕与智能抠图
python·音视频
平头哥技术团队5 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
乌萨奇也要立志学C++5 小时前
【洛谷】kmp算法
开发语言·算法
梦想的颜色5 小时前
OCR 识别原理与 Python 识图全实战:从文字提取到图像内容理解
python·计算机视觉·ocr·图像识别·python 识图
禹凕5 小时前
Dijkstra算法详解与应用
python·算法
传奇开心果编程5 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust