CentOS系统中设置启动时自动运行Shell脚本
时间:2025-6-16 16:43 作者:六度科技 分类: linux技巧
在CentOS系统中设置启动时自动运行Shell脚本,可以通过以下几种方法实现(以CentOS 7及更高版本为例,使用systemd
服务管理):
方法1:通过 systemd
服务实现(推荐)
步骤:
-
创建脚本文件
将你的脚本(如myscript.sh
)放在安全目录(如/usr/local/bin/
),并赋予执行权限:sudo cp /path/to/myscript.sh /usr/local/bin/ sudo chmod 777 /usr/local/bin/myscript.sh
-
创建
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 # 多用户模式(默认启动级别)
-
启用服务并启动
sudo systemctl daemon-reload # 重载配置 sudo systemctl enable myscript.service # 设置开机自启 sudo systemctl start myscript.service # 立即启动(可选)
-
验证服务状态
systemctl status myscript.service
方法2:使用 /etc/rc.d/rc.local
(传统方法,需手动授权)
适用于兼容旧版SysV的场景(CentOS 7 默认禁用,需手动启用)
步骤:
- 编辑
/etc/rc.d/rc.local
添加你的脚本路径:sudo vi /etc/rc.d/rc.local
在文件末尾添加:
/usr/local/bin/myscript.sh su - root -c "/home/myscript.sh &"
-
赋予
rc.local
执行权限sudo chmod +x /etc/rc.d/rc.local
-
启用
rc-local
服务(如果未启用)sudo systemctl enable rc-local.service
方法3:通过 cron
的 @reboot
实现
脚本以当前用户身份运行(无需root权限时适用)
步骤:
- 编辑当前用户的cron任务
crontab -e
- 添加一行配置
@reboot /usr/local/bin/myscript.sh
调试与注意事项
-
脚本权限问题
- 确保脚本有执行权限:
chmod +x /path/to/script.sh
- 脚本开头需指定解释器(如
#!/bin/bash
)
- 确保脚本有执行权限:
-
环境变量问题
- 系统启动时环境变量可能未加载,建议在脚本中使用绝对路径(如
/usr/bin/python3
而非python3
)。
- 系统启动时环境变量可能未加载,建议在脚本中使用绝对路径(如
-
日志记录
- 在脚本中重定向输出以便调试:
#!/bin/bash exec > /var/log/myscript.log 2>&1 # 后续命令...
- 在脚本中重定向输出以便调试:
-
依赖服务
- 若脚本依赖网络/数据库等服务,在
systemd
配置中使用After=
指定依赖(如After=network.target mariadb.service
)。
- 若脚本依赖网络/数据库等服务,在
验证开机自启
# 重启系统
sudo reboot
# 检查脚本是否执行
journalctl -u myscript.service # 查看 systemd 服务日志
cat /var/log/myscript.log # 检查脚本日志
选择最适合你场景的方法即可!推荐优先使用 systemd
服务(方法1),因其可控性强且易于管理。