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

相关文章:

  • 验证回文串2
  • 从ES5到ES6+:JavaScript语法演进与实现解析
  • 如何进行前端性能测试?--性能标准
  • rsync
  • Hadoop 的代理用户(Proxy User)​ 功能解释
  • VUE3基础样式调整学习经验
  • react-diff-viewer 如何实现语法高亮
  • 模块化PCB设计中联排半孔的应用
  • 【Bootstrap V4系列】学习入门教程之 组件-模态框(Modal)
  • Hugging Face推出了一款免费AI代理工具,它能像人类一样使用电脑
  • Elasticsearch 字段映射与数据类型
  • 物理:海市蜃楼是宇宙背景辐射吗?
  • [Java][Leetcode middle] 121. 买卖股票的最佳时机
  • 汽车紧固件涂层18问:看敦普无铬锌铝涂料如何为螺丝防锈防腐
  • 遭遇DDoS攻击为什么不能反击回去?
  • MATLAB复制Excel数据到指定区域
  • Egg.js知识框架
  • 塔能智能照明方案:点亮重庆某县节能落地
  • Ollama本地部署
  • 深度学习---常用优化器
  • 在嵌入式调试中IAR提示Fatal error: Failed connecting to probe Session aborted!怎么回事?怎么解决?
  • 【软考-高级】【信息系统项目管理师】论文写作注意事项及2014年至2024年历年论文题目汇总
  • Docker快速入门与应用
  • AD开启交叉选择功能,只选中器件,不选中网络、焊盘
  • TestNG接口自动化
  • h5移动端适配-dvh
  • SVN 中文路径访问报错(权限已正确分配)
  • YAFFS2 文件系统的 `yaffs_dev` 数据结构详解
  • UE RPG游戏开发练手 第二十二课 卸下手上武器
  • 蓝牙AVDTP协议概述