当前位置: 首页 > 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.dtcms.com/a/276515.html

相关文章:

  • 复现永恒之蓝
  • LINUX文件系统权限,命令解释器alias,文件查看和查找
  • frp内网穿透教程及相关配置
  • LaTeX | 在电脑上输入专业数学符号
  • Cursor创建Spring Boot项目
  • CUDA Graph与torch.compile推理计算图捕获详解
  • 电网通俗解析术语2:一二次设备关联
  • 【数据结构初阶】--单链表(一)
  • 细解muduo中的每个核心类
  • C++ const 关键字解析
  • windows 改用 nvm
  • 睿抗CAIP编程技能
  • AI 助力编程:Cursor Vibe Coding 场景实战演示
  • js二维数组如何变为一维数组
  • 数位动态规划详解
  • 顺序队列和链式队列
  • 淘宝商品评论API接口使用指南
  • 【C#】GraphicsPath的用法
  • Filament引擎(三) ——引擎渲染流程
  • Windows安装SSH
  • python库之jieba 库
  • 当大模型遇见毫米波:用Wi-Fi信号做“透视”的室内语义SLAM实践——从CSI到神经辐射场的端到端开源方案
  • 【Scratch】从入门到放弃(五):指令大全-九大类之运算、变量、自制积木
  • 下雨天的思考
  • 2025 XYD Summer Camp 7.10 筛法
  • Fusion: 无需路径条件的路径敏感分析
  • 端到端自动驾驶:挑战与前沿
  • Redis数据类型之set
  • 巅峰对决:文心4.5 vs DeepSeek R1 vs 通义Qwen3.0——国产大模型技术路线与场景能力深度横评
  • flowable或签历史任务查询