当前位置: 首页 > 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 表示网络基本配置完成,

相关文章:

  • 验证回文串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本地部署
  • 深度学习---常用优化器
  • 欧元区财长会讨论国际形势及应对美国关税政策
  • 商务部召开外贸企业圆桌会:全力为外贸企业纾困解难,提供更多支持
  • 在对国宝的探索中,让美育浸润小学校园与家庭
  • 湛江霞山通报渔船火灾:起火船舶共8艘,无人员伤亡或被困
  • 老镇老宅楼:破旧,没产证,要不要更新?
  • 总没胃口,一吃就饱……别羡慕,也可能是生病了