SysV 脚本为何还要查
在已经切换到 systemd 的发行版上,/etc/init.d/ 下的 SysV 脚本并没有自动失效:systemd 通过 sysv-generator 为这些脚本生成兼容单元,只要被 enable 或存在依赖关系就可能被拉起。排查启动项时,除了看 systemd 单元还要看这一层残留。新出现的脚本、或指向异常目标的符号链接,往往对应一次持久化动作,这也是启动项排查最容易漏掉的一层。
基本信息
| 目录 | /etc/init.d/ 与 /etc/rc*.d/ |
|---|---|
| 运行机制 | sysv-generator 生成兼容单元后由 systemd 调用 |
| 检查重点 | 脚本文件 mtime、符号链接目标、链接新增时间 |
| 相关命令 | chkconfig --list、systemctl list-unit-files |
典型使用场景
- 排查主机启动项,确认是否存在 systemd 之外的自启脚本
- 发现某个陌生服务在开机后被拉起,回溯其注册方式
- 对比备份中的 /etc/init.d/ 目录,找出新增或改动文件
- 检查运行级别目录中指向临时目录的异常链接
- 评估老旧脚本与现代单元并存带来的实际执行顺序
排查命令
排查命令
ls -lt --time-style=long-iso /etc/init.d/ | head # 按时间列出脚本,新的在上
find /etc/rc3.d /etc/rc5.d -type l -newermt '-30 days' 2>/dev/null # 近期新增的链接
readlink -f /etc/rc3.d/S99redis # 查看链接真实指向
chkconfig --list 2>/dev/null | head -20 # 查看运行级别启用状态
systemctl list-unit-files --type=service | head -20 # 与现代单元对照运行级别链接读法
| 命名形式 | 含义 | 判读要点 |
|---|---|---|
| S 开头 | 启动时执行,编号决定先后 | 编号改动会改变启动顺序 |
| K 开头 | 停止时执行 | 异常 K 链接可能阻止服务停止 |
| 指向异常路径 | 链接目标不在 /etc/init.d/ | 常见于临时目录投放的脚本 |
| 链接 mtime 新 | 链接本身近期被创建 | 只改链接名不会改动目标脚本时间 |
符号链接名以 S 开头表示启动、K 开头表示停止,编号决定执行顺序;链接改名不会改变目标脚本的时间戳,判断时要同时看目标文件与链接本身。
文件存在不等于会被调用:脚本缺少执行位、链接未被 enable 或对应运行级别未使用,都不会在开机时触发;判断启动项时要结合链接状态与实际使用的运行级别。