Linux服务自启动配置排查

1. 检查 systemd 服务(主要方式)

列出所有已启用的服务(开机自启动)
systemctl list-unit-files --type=service --state=enabled

查找特定服务的状态(替换 YOUR_SERVICE_NAME)
systemctl status YOUR_SERVICE_NAME.service

关键位置
服务配置文件:/usr/lib/systemd/system/(系统级)或 /etc/systemd/system/(自定义配置)
启用链接:/etc/systemd/system/*.wants/ 目录下的软链接

2. 检查 SysVinit 脚本(旧系统)

若服务未通过 systemd 管理

列出所有 chkconfig 管理的服务
chkconfig --list

查找 /etc/init.d/ 目录下的脚本
ls -l /etc/init.d/

关键位置
启动脚本:/etc/init.d/ 目录
符号链接:/etc/rc.d/rc\[0-6].d/(如 S99service 表示启动,K01service 表示关闭)

3. 检查 rc.local(简单启动命令)

若服务是通过启动命令实现的
cat /etc/rc.d/rc.local

注意
确保 rc.local 有执行权限:chmod +x /etc/rc.d/rc.local
systemd 服务需启用:systemctl enable rc-local.service

4. 检查定时任务(cron)

服务可能通过 @reboot 定时任务启动

检查系统级 cron

cat /etc/crontab
ls /etc/cron.d/

检查用户级 cron

crontab -l -u root   # root 用户
crontab -l -u YOUR_USER  # 其他用户

5. 检查进程启动来源

若已知服务进程名

通过进程名反查服务

pstree -asp $(pgrep YOUR_PROCESS_NAME)

观察父进程树,可能追溯到启动脚本或服务管理器

6. 使用日志工具

通过系统日志追踪启动过程

journalctl -b -0 | grep -i "startup\|service\|YOUR_KEYWORD"
# 或
grep "启动的服务名" /var/log/messages

排查流程图

caf1a1cf42f17a6a944209a929fdc21c.png