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

Linux 系统中设置开机启动脚本

Linux 系统中设置开机启动脚本有多种方法,适用于不同的场景和需求。以下是几种最常用且详细的方法:

核心理念: 无论哪种方法,核心都是让系统在启动过程中的某个阶段执行你的脚本。

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

systemd 是目前大多数主流 Linux 发行版(如 Ubuntu 16.04+, CentOS 7+, Debian 8+, Fedora 15+)使用的初始化系统和服务管理器。这是最强大、最灵活且推荐的方法。

你需要创建一个 "service unit" 文件来告诉 systemd如何管理你的脚本。

步骤:

  1. 编写你的启动脚本:

    • 确保脚本有正确的 shebang (例如 #!/bin/bash 或 #!/usr/bin/env python3)。
    • 赋予脚本执行权限:chmod +x /path/to/your/script.sh
    • 重要:在脚本中尽量使用绝对路径来调用命令和访问文件,因为启动时的环境变量可能与你登录后不同。
    • 考虑在脚本中添加日志记录,方便排错。
    #!/bin/bash
    # /usr/local/bin/my_startup_script.shLOG_FILE="/var/log/my_startup_script.log"echo "$(date): My startup script is running..." >> $LOG_FILE
    # 在这里添加你的命令
    # 例如:/usr/bin/python3 /opt/my_app/main.py >> $LOG_FILE 2>&1
    # 例如:/usr/sbin/another_service --config /etc/another_service.conf >> $LOG_FILE 2>&1
    echo "$(date): My startup script finished." >> $LOG_FILEexit 0
    
  2. 创建 systemd service unit 文件:

    • Unit 文件通常放在 /etc/systemd/system/ 目录下。
    • 文件名以 .service 结尾,例如 my_script.service
    # /etc/systemd/system/my_script.service[Unit]
    Description=My Custom Startup Script
    After=network.target network-online.target # 指定在网络服务启动后运行 (如果脚本需要网络)
    # Wants=network-online.target (如果只是希望网络在线,但不是硬性要求)[Service]
    Type=simple  # 或者 oneshot (如果脚本执行完就退出,不作为守护进程)
    ExecStart=/usr/local/bin/my_startup_script.sh
    User=root    # 指定运行脚本的用户,可以是普通用户,更安全
    # Group=yourgroup # 指定运行脚本的用户组
    # WorkingDirectory=/opt/my_app # 如果脚本需要特定的工作目录
    # Restart=on-failure # 如果脚本失败,可以配置自动重启
    # RestartSec=5s      # 重启前等待的时间
    # Environment="MY_VAR=some_value" # 设置环境变量[Install]
    WantedBy=multi-user.target # 表示在多用户模式下启动 (标准的服务器运行级别)
    # WantedBy=graphical.target (如果需要在图形界面启动后运行)
    

    [Unit] 部分解释:

    • Description: 服务的描述。
    • After: 定义此服务应该在哪些服务之后启动。network.target 表示网络基本配置完成,
http://www.xdnf.cn/news/405433.html

相关文章:

  • AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
  • 【JAVA】业务系统订单号,流水号生成规则工具类
  • python练习-20250512
  • C++23 views::slide (P2442R1) 深入解析
  • AnaTraf:深度解析网络性能分析(NPM)
  • C语言:深入理解指针(3)
  • 基于 Nexus 在 Dockerfile 配置 yum, conda, pip 仓库的方法和参考
  • T2000云腾边缘计算盒子在数猪场景中的应用|YOLOv8+NodeRED
  • 湖北理元理律师事务所:企业债务危机的“止血”与“造血”平衡术
  • 01背包和完全背包
  • 基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器——MuPDF Tools
  • 大项目k8s集群有多大规模,多少节点,有多少pod
  • 智能指针入门:深入理解 C++ 的 shared_ptr
  • AI中的MCP是什么?MCP的作用及未来方向预测 (使用go-zero 快速搭建MCP服务器)
  • 2025年北京市积分落户申报
  • 经典案例 | 智能眼镜中瞳距调节和近视调节的应用
  • web 自动化之 Unittest 四大组件
  • 【NextPilot日志移植】ULog
  • 文档外发安全:企业数据防护的最后一道防线
  • RabbitMQ 工作模式
  • JWT的介绍与在Fastapi框架中的应用
  • 单片机-STM32部分:13-1、蜂鸣器
  • 常用依赖文件库
  • kubernetes服务自动伸缩-VPA
  • ESP32开发入门(九):HTTP服务器开发实践
  • Day22打卡-复习
  • 【K8S学习之探针】详细了解就绪探针 readinessProbe 和存活探针 livenessProbe 的配置
  • Kotlin 异步初始化值
  • JVM类加载
  • 生产环境怎么移除console