«

CentOS系统中设置启动时自动运行Shell脚本

时间:2025-6-16 16:43     作者:六度科技     分类: linux技巧


在CentOS系统中设置启动时自动运行Shell脚本,可以通过以下几种方法实现(以CentOS 7及更高版本为例,使用systemd服务管理):


方法1:通过 systemd 服务实现(推荐)

步骤:

  1. 创建脚本文件
    将你的脚本(如 myscript.sh)放在安全目录(如 /usr/local/bin/),并赋予执行权限:

    sudo cp /path/to/myscript.sh /usr/local/bin/
    sudo chmod 777 /usr/local/bin/myscript.sh
  2. 创建 systemd 服务单元文件
    /etc/systemd/system/ 下创建服务文件(如 myscript.service):

    sudo vi /etc/systemd/system/myscript.service

    添加以下内容:

    [Unit]
    Description=My Custom Startup Script
    After=network.target  # 根据需要调整(如网络启动后执行)
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/myscript.sh
    User=root  # 指定运行用户(如 root 或其他用户)
    
    [Install]
    WantedBy=multi-user.target  # 多用户模式(默认启动级别)
  3. 启用服务并启动

    sudo systemctl daemon-reload          # 重载配置
    sudo systemctl enable myscript.service # 设置开机自启
    sudo systemctl start myscript.service  # 立即启动(可选)
  4. 验证服务状态

    systemctl status myscript.service

方法2:使用 /etc/rc.d/rc.local(传统方法,需手动授权)

适用于兼容旧版SysV的场景(CentOS 7 默认禁用,需手动启用)

步骤:

  1. 编辑 /etc/rc.d/rc.local
    添加你的脚本路径:
    sudo vi /etc/rc.d/rc.local

    在文件末尾添加:

    /usr/local/bin/myscript.sh
    su - root -c "/home/myscript.sh &"
  1. 赋予 rc.local 执行权限

    sudo chmod +x /etc/rc.d/rc.local
  2. 启用 rc-local 服务(如果未启用)

    sudo systemctl enable rc-local.service

方法3:通过 cron@reboot 实现

脚本以当前用户身份运行(无需root权限时适用)

步骤:

  1. 编辑当前用户的cron任务
    crontab -e
  2. 添加一行配置
    @reboot /usr/local/bin/myscript.sh

调试与注意事项

  1. 脚本权限问题

    • 确保脚本有执行权限:chmod +x /path/to/script.sh
    • 脚本开头需指定解释器(如 #!/bin/bash
  2. 环境变量问题

    • 系统启动时环境变量可能未加载,建议在脚本中使用绝对路径(如 /usr/bin/python3 而非 python3)。
  3. 日志记录

    • 在脚本中重定向输出以便调试:
      #!/bin/bash
      exec > /var/log/myscript.log 2>&1
      # 后续命令...
  4. 依赖服务

    • 若脚本依赖网络/数据库等服务,在 systemd 配置中使用 After= 指定依赖(如 After=network.target mariadb.service)。

验证开机自启

# 重启系统
sudo reboot

# 检查脚本是否执行
journalctl -u myscript.service  # 查看 systemd 服务日志
cat /var/log/myscript.log       # 检查脚本日志

选择最适合你场景的方法即可!推荐优先使用 systemd 服务(方法1),因其可控性强且易于管理。