在 CentOS 7 环境里,很多管理员仍然习惯把自定义命令写进 /etc/rc.d/rc.local,但系统默认的启动框架已经切换到 systemd。实际上,rc.local 并未被彻底废除,只是需要手动赋予执行权限并启用 rc-local.service,否则它会在并行启动阶段被跳过。
从技术文档来看,rc.local 仍保留在 /etc/rc.d/ 目录,仅作为兼容层存在。系统启动时,systemd 会读取 rc-local.service,该服务的 ExecStart 指向 rc.local。若文件缺少执行位(chmod +x /etc/rc.d/rc.local),服务直接报错并退出,导致后续脚本无声失效。
systemctl status rc-local.service。systemctl enable rc-local.service 并重启验证。.service 单元,将脚本逻辑迁移进去,避免依赖 rc.local。某金融公司在生产环境中使用 rc.local 创建日志目录并写入启动标记。迁移步骤如下:
/etc/systemd/system/custom-start.service 中编写:[Unit]
Description=Custom startup script
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/startup.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
随后将原 rc.local 中的 touch /var/log/startup.flag 移入 /usr/local/bin/startup.sh,并执行 systemctl daemon-reload && systemctl enable custom-start.service。重启后,日志文件如期生成,且启动时间比原 rc.local 提前约 3 秒。
execmem 会被拦截。综上所述,rc.local 在 CentOS 7 仍能使用,但更稳妥的做法是把启动脚本封装为 systemd 服务单元,既符合现代化运维理念,又能在日志审计和权限控制上获得更细粒度的管理。
参与讨论
我把原来的rc.local迁移到自定义service后,启动更快了,省了不少调试时间,还避免了并行启动时的竞争问题,整体运维更顺畅。
别忘了给rc.local加执行位,chmod +x /etc/rc.d/rc.local,否则service会直接报错。
rc-local.service默认是禁用状态吗?
有人说rc.local不可靠,我用它来创建临时文件夹,配合systemd的ExecStartPre,运行稳定没有出现报错。
前几天把日志目录搬到systemd服务,结果启动时自动创建,省了手动改rc.local的麻烦。
rc.local还能用,只是得手动开一下。
rc.local这玩意儿真是遗留的老古董。
听说某公司迁移后启动时间提速3秒,大家都在讨论要不要也改 👍
自定义service确实更稳妥,推荐大家都改一下。