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

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.lryc.cn/news/2378246.html

相关文章:

  • linux-进程信号的产生
  • 内容中台重构企业知识管理路径
  • ubuntu22.04卸载vscode
  • AGI大模型(19):下载模型到本地之ModelScope(魔搭社区)
  • 基于Spring Boot+Layui构建企业级电子招投标系统实战指南
  • Kali安装详细图文安装教程(文章内附有镜像文件连接提供下载)
  • 2.4GHz无线芯片核心技术解析与典型应用
  • ai agent(智能体)开发 python高级应用4:什么是代理,如何设置squid代理服务器,让crawl4ai 0.6.3 用上代理,获取到数据平权
  • 技术融资:概念与形式、步骤与案例、挑战与应对、发展趋势
  • Chrome代理IP配置教程常见方式附问题解答
  • 微信小程序 密码框改为text后不可见,需要点击一下
  • LLM笔记(六)线性代数
  • Linux——UDP/TCP协议理论
  • Go语言爬虫系列教程(一) 爬虫基础入门
  • PromptIDE提示词开发工具支持定向优化啦
  • 多返回值(Multiple Return Values)- 《Go语言实战指南》
  • 致远OA人事标准模块功能简介【附应用包百度网盘下载地址,官方售价4W】
  • Python-简单网络编程 I
  • 鸿蒙北向应用开发: deveco5.0 创建开源鸿蒙项目
  • 数据库故障排查指南:从入门到精通
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice自定义Word模版中的数据区域
  • 基于基金净值百分位的交易策略
  • 2025蓝桥杯JAVA编程题练习Day8
  • 通信安全堡垒:profinet转ethernet ip主网关提升冶炼安全与连接
  • DL00219-基于深度学习的水稻病害检测系统含源码
  • 在24GB显存大小的GPU上运行27GB的Pytorch模型
  • 【数据机构】2. 线性表之“链表”
  • 【51单片机中断】
  • JavaSE基础语法之方法
  • 华为网路设备学习-22(路由器OSPF-LSA及特殊详解)