当前位置: 首页 > news >正文

Linux如何设置自启动程序?

在 Linux 中设置程序开机自启动有多种方法,具体取决于你的发行版和需求。以下是 6 种主流方法,涵盖 systemdcronrc.local 等方式:


1. 使用 systemd(推荐,现代 Linux 发行版通用)

systemd 是大多数现代 Linux 系统(Ubuntu 20.04+、CentOS 7+、Debian 9+)的默认初始化系统。

步骤:

  1. 创建服务文件(如 myapp.service

    sudo nano /etc/systemd/system/myapp.service
  2. 填写配置(以 Python 脚本为例):

    ini

    [Unit]
    Description=My Custom App
    After=network.target  # 确保网络就绪后启动[Service]
    Type=simple
    User=ubuntu           # 运行用户
    WorkingDirectory=/path/to/your/app
    ExecStart=/usr/bin/python3 /path/to/your/app/main.py
    Restart=always        # 崩溃后自动重启
    RestartSec=5          # 重启间隔(秒)[Install]
    WantedBy=multi-user.target  # 多用户模式启动
  3. 启用并启动服务

    sudo systemctl daemon-reload          # 重新加载配置
    sudo systemctl enable myapp.service   # 设置开机自启
    sudo systemctl start myapp.service    # 立即启动
  4. 检查状态

    sudo systemctl status myapp.service

2. 使用 /etc/rc.local(传统方法,适用于旧系统)

适用于支持 rc.local 的发行版(如 Ubuntu 18.04 之前版本)。

步骤:

  1. 编辑 /etc/rc.local

    sudo nano /etc/rc.local
  2. 在 exit 0 之前添加命令:

    /usr/bin/python3 /path/to/your/app/main.py &

    注意:末尾的 & 表示后台运行,避免阻塞启动流程。

  3. 赋予可执行权限:

    sudo chmod +x /etc/rc.local

3. 使用 crontab(定时任务,灵活控制)

通过 @reboot 实现开机自启:

crontab -e  # 编辑当前用户的 cron 任务

添加以下行:

@reboot /usr/bin/python3 /path/to/your/app/main.py

优点:无需 root 权限,适合用户级程序。


4. 使用 /etc/init.d(SysV Init 系统,旧版兼容)

适用于传统 SysV Init 系统(如 CentOS 6):

  1. 创建启动脚本:

    sudo nano /etc/init.d/myapp
  2. 模板示例:

    #!/bin/bash
    case "$1" instart)/usr/bin/python3 /path/to/your/app/main.py &;;stop)pkill -f "main.py";;
    esac
  3. 赋予权限并注册服务:

    sudo chmod +x /etc/init.d/myapp
    sudo update-rc.d myapp defaults  # Ubuntu/Debian
    sudo chkconfig myapp on         # CentOS/RHEL

5. 图形界面工具(适合桌面环境)

  • Ubuntu/Debian:使用 Startup Applications(搜索“启动应用程序”)。

  • GNOMEgnome-session-properties 命令添加自启动项。


6. 使用 PM2(Node.js 工具,但可管理任意进程)

适合需要进程守护的场景:

  1. 安装 PM2:

    npm install -g pm2
  2. 启动并设为自启:

    pm2 start /path/to/your/app/main.py --name "myapp" --interpreter python3
    pm2 save       # 保存当前进程列表
    pm2 startup    # 生成自启动脚本

常见问题排查

  1. 权限问题

    • 确保脚本和依赖文件对运行用户可读/可执行。

    • 使用 chmod +x script.sh 赋予可执行权限。

  2. 环境变量丢失

    • 在 systemd 服务文件中通过 Environment 指定:

      ini

      [Service]
      Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
  3. 日志查看

    • systemd 日志:journalctl -u myapp.service -f

    • rc.local 日志:/var/log/boot.log


总结

方法适用场景是否需要 root推荐指数
systemd现代 Linux 服务器需要⭐⭐⭐⭐⭐
rc.local旧版系统/简单脚本需要⭐⭐
crontab @reboot用户级程序不需要⭐⭐⭐
/etc/init.dSysV Init 系统兼容需要⭐⭐
图形工具桌面环境不需要⭐⭐⭐
PM2需要进程守护(跨平台)可选⭐⭐⭐⭐

推荐优先级systemd > crontab > PM2,其他方法仅在特定场景使用。

http://www.lryc.cn/news/586513.html

相关文章:

  • 三步定位 Git Push 403:从日志到解决
  • 我自建服务器部署了 Next.js 全栈项目
  • Java实现文字图片
  • Git系列--4.Git分支设计规范
  • 【PMP备考】敏捷思维:驾驭不确定性的项目管理之道
  • Android音视频探索之旅 | C++层使用OpenGL ES实现视频渲染
  • 笔记-分布式计算基础
  • 容器化改造避坑指南:传统应用迁移K8s的10个关键节点(2025实战复盘)
  • 黑客工具Nessus介绍及其安装使用教程
  • 无法打开windows安全中心解决方案
  • python内置函数 —— zip
  • 【6.1.2 漫画分布式事务技术选型】
  • Pandas 模块数据处理全解析
  • Wwise音频在Unity中内存泄露问题
  • 如何检测自动化设备中的直线导轨品质是否优良?
  • 【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
  • 2025Stockapi股票数据接口,股票实时数据,技术指标macd,kdj,cci技术指标算法,集合竞价数据,龙虎榜数据接口
  • 全连接网络 和卷积神经网络
  • 《PyQtGraph例子库:Python数据可视化的宝藏地图》
  • 技术面试问题总结二
  • Python 实战:构建可扩展的命令行插件引擎
  • 希尔排序和选择排序及计数排序的简单介绍
  • C++法则21:避免将#include放在命名空间内部。
  • 20250712-2-Kubernetes 应用程序生命周期管理-部署应用的流程_笔记
  • Java ThreadLocal详解:从原理到实践
  • Arduino 无线通信实战:使用 RadioHead实现 315MHz 433M模块数据传输
  • AV1比特流结构
  • Paimon Lookup 哈希文件和Sort文件选择
  • Claude code在Windows上的配置流程
  • 内存dmp文件太大导致计算机登录异常