服务器时间突然“倒退”五年怎么办?监控平台卡“启动中”、门禁集体离线的时钟回跳故障排查实录

发布时间:2026-11-03 · 郑州晋元网络科技有限公司

导读

某天深夜,某企业视频监控平台突发故障:运维平台无法登录,管理中心页面永远停留在“启动中”,门禁子系统整屏设备离线,平台还弹出“数据库有故障”告警。更棘手的是,服务器的 root 密码已遗失,且 root 账号被平台安全策略禁止 SSH 登录。表面上是四五个互不相关的故障,实际排查后发现,绝大多数症状都指向同一个根因——服务器系统时钟回跳到了五年前的出厂时间。本文完整还原排查思路与处置过程,供同行参考。

一、现场环境与故障现象

项目情况
平台类型视频监控综合管理平台(Linux 服务器,原生服务 + 守护脚本架构)
服务器配置8 网口工控服务器 / 62G 内存 / 多块 LVM 数据盘(录像、图片、数据库、消息队列独立分区)
承载业务视频监控、门禁一卡通、报警联动;接入数十台门禁控制器与前端设备
故障现象①运维平台可登录,但管理中心一直显示“启动中”,无法进入
故障现象②平台告警“当前环境数据库有故障,请尽快修复”
故障现象③门禁设备全部离线,开关门功能失效,日志刷满设备登录失败(errCode=0x9)
故障现象④root 密码遗失;SSH 仅允许 uid≥1000 的账号登录

初步盘点服务进程:Java 服务 28 个、守护(keeper)进程 67 个,均在运行;磁盘、内存、负载全部健康;门户 HTTPS 探测返回 200。“进程都活着,平台却起不来”——这种组合通常指向服务间通信/认证层面的问题,而不是资源或进程层面的问题。

二、排查过程

第一步:恢复登录通道(GRUB rd.break 重置 root 密码)

root 密码遗失,通过 GRUB 单用户方式重置。注意:该平台定制内核下常用的 rw init=/bin/bash 方式两次失败(内核 panic),最终采用 rd.break 方案成功:

1. GRUB 菜单按 e 编辑,linux16 行保留 ro,删除行尾 rhgb quiet,替换为:rd.break enforcing=0
2. Ctrl+X 启动,进入 switch_root:/# 提示符后依次执行:
   mount -o remount,rw /sysroot
   chroot /sysroot
   passwd root
   touch /.autorelabel
   exit
   exit
3. 自动重启(SELinux 重打标签阶段长时间黑屏属正常,切勿断电)

密码重置后 root 仍无法 SSH 登录。查 journalctl 发现真实原因不是密码,而是 PAM 加固策略:

pam_succeed_if (sshd:auth): requirement "uid >= 1000" not met by user root

平台安全加固禁止 uid<1000 的账号走 SSH(root 的 uid 为 0)。处置:新建普通运维用户,加入 wheel 组获得 sudo 权限,作为日常 SSH 通道;同时确认该机安全策略会在认证失败时直接 kill sshd 进程,故为其配置了保活定时任务:

# /etc/cron.d/sshd_keep
* * * * * root pgrep -x sshd >/dev/null || systemctl start sshd

第二步:发现时钟异常——所有症状的总根源

排查设备接入服务(门禁通信模块)日志时发现明显的时间线断裂:10 月底之前日志一切正常,随后时间戳突然跳回五年前的出厂日期,此后该模块开始周期性崩溃、门禁设备全部登录失败:

[10-29 01:18:00] [INFO] ... (正常时期的日志)
[01-05 23:48:18] [INFO] disk.go:697, update disk[/staticpic] free size success ... (时间已跳回五年前)

进一步用 timedatectl 核实:时区配置正确(Asia/Shanghai +0800),但本地时间比真实时间快了 8 小时,NTP 显示“已同步”而同步源竟是 LOCAL(0)——机器在跟自己对时,同步状态是假象。真实病根:主板 RTC 电池失效,断电/重启后时钟回落到出厂默认值,且无有效的外部 NTP 源兜底。

时钟错误解释了此前所有“灵异”现象:

症状时钟回跳如何导致
管理中心卡“启动中”平台内部服务间通信全部走 HTTPS;系统时间早于证书生效期,TLS 握手全部被拒,服务注册与心跳上报失败,管理界面永远等不到“就绪”
运维模块周期性崩溃该 Go 原生模块的定时任务/会话在时间跳变后逻辑错乱,约每 40 分钟 crash 一次,被守护进程反复拉起
门禁设备全部离线(0x9)平台把错误时间自动同步给了所有门禁控制器;设备时间停留在五年前,平台证书在设备侧“尚未生效”,安全登录(SecurityLogin)双向认证被拒
SSH 日志时间乱码系统时间在多次重启间跳变,日志出现大量非法时间戳

第三步:修复时钟

timedatectl set-ntp false        # 先关掉假同步,防止被顶回
date -s "<真实当前时间>"           # 手动校准
hwclock -w                        # 写入硬件时钟,防止重启再丢
timedatectl                       # 复核 Local time 与手机时间一致

时间修正后重启设备接入服务(守护进程自动拉起),并用运维用户重启了平台全套服务。管理中心在时间修正后恢复正常进入,“有效期错误”类告警消失。

第四步:数据库故障——被停掉后无人拉起

平台告警“数据库有故障”。检查发现 MySQL 进程不存在,而错误日志末尾是一次干净的正常关闭(Shutdown complete),时间点恰与执行平台整体重启脚本的时间吻合。

深入排查启动链路发现两个事实:

1)平台的整体重启脚本(restartAll/startAll)确实包含启动 MySQL 的步骤(调用官方封装的 startMysql.sh),但故障当晚那轮启动是在系统时间错误期间执行的,MySQL 环节未能成功拉起;而 MySQL 本身不归 systemd 管、也没有独立的运行守护——停了就没人管。

2)机器重启(开机自启)层面,rc.local 中只有安装镜像加载逻辑,没有数据库启动项。

处置:用平台官方脚本手动拉起数据库(该脚本会处理目录属主、残留 socket 清理、文件句柄上限、分区维护,比裸跑 mysqld_safe 可靠),确认 Storage.err 出现 ready for connections、平台告警消除:

cd /opt/mysql/bin && ./startMysql.sh
# 验证:
ps -ef | grep mysqld | grep -v grep
tail -3 /opt/mysql/data/Storage.err   # → 见 ready for connections

随后补上两道保险:

# 开机自启(写入 rc.local,sleep 等挂载就绪)
sleep 30; /opt/mysql/bin/startMysql.sh

# 运行中守护(/etc/cron.d/mysql_keep,每2分钟检查,挂了自动拉起)
*/2 * * * * root pgrep -x mysqld >/dev/null || /opt/mysql/bin/startMysql.sh

三、处置结果

项目故障时处置后
系统时间回跳至五年前出厂时间,重启即漂移已校准并写入硬件时钟,与真实时间一致
管理中心永远“启动中”,无法进入正常进入,各服务状态在线
数据库进程缺失,平台告警“数据库故障”正常运行,已配开机自启 + 2 分钟级守护
SSH 通道root 密码遗失 + PAM 禁 root 登录新运维用户(wheel/sudo)+ sshd 保活,通道稳定
门禁设备全部离线(0x9 认证失败)服务器侧已恢复;设备侧需批量校时(平台下发/设备 Web 页),校时后自动重连
消息队列/中间件磁盘余量充足,无告警正常

遗留事项(已向客户交底):1)更换主板 RTC 电池——时钟能回落到出厂默认值,电池基本确定失效,不更换则每次断电重启都会复发;2)配置可达的 NTP 源(有外网指公共 NTP,无外网在内网指定一台时间基准机),杜绝 LOCAL 假同步;3)门禁设备批量校时后复核平台设备在线率;4)服务器到部分设备网段的静态路由需固化到开机脚本。

四、可复用经验与避坑清单

1)“进程都活着但平台起不来”,先查系统时间。企业级平台内部通信普遍依赖 TLS 证书,时钟落在证书有效期之外会造成大面积、看似毫无关联的故障(页面卡启动中、设备集体掉线、模块周期崩溃)。一条 date 命令的成本远低于逐个模块排查。

2)NTP 显示 synchronized 不等于时间正确。同步源是 LOCAL(0) 就是机器在自我对时,属于假同步;核实时间要以 timedatectl 的源列表和真实时间对照为准。

3)时钟错误会“传染”给终端设备。平台会自动向摄像机、门禁控制器等设备下发时间同步,服务器时间错了,全场设备跟着错;修完服务器必须再批量校设备时间,否则设备侧证书校验依旧失败,表现为设备在线但业务不通、认证错误码刷屏。

4)数据库这类核心组件必须有双保险:开机自启 + 运行守护。平台自带的整体启停脚本在异常状态下(如本次时间错误期间)执行可能悄悄失败,且很多平台的数据库不归 systemd 管理,“脚本会拉起来”的假设不可靠,独立守护是底线。

5)重启数据库用平台官方封装脚本,不要裸跑 mysqld_safe。官方脚本处理了运行用户、目录属主、残留 socket、文件句柄上限、分区维护等细节,裸跑短期没事,长期埋雷。

6)被安全加固的机器,SSH 登录失败先看 PAM 再看 sshd_config。“uid >= 1000”这类 PAM 规则会精确拦截 root,而配置文件层面完全看不出异常;认证失败还可能触发安全策略直接杀掉 sshd,形成“越试越连不上”的假象。

7)GRUB 密码重置首选 rd.break enforcing=0,慎用 init=/bin/bash。定制内核 + 行尾 rhgb quiet 参数极易导致后者内核 panic;rhgb 不删除时会被 bash 当作脚本执行。

郑州晋元网络科技有限公司提供视频监控平台运维、故障排查、数据库救援、安全加固与等保合规等 IT 运维外包服务。如您的平台出现类似“服务都在运行但页面异常”“设备集体离线”“数据库无守护”等问题,欢迎联系评估。

官网:www.jyops.cn

晋元网络 —— 企业IT运维外包 · AI应用落地 · 软件定制开发
了解运维服务