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),因其可控性强且易于管理。