实用网络站
白蓝主题五 · 清爽阅读
首页  > 服务器维护

解密常见问题:服务器维护中那些让人头疼的故障排查

登录不了服务器?先看这几步

半夜收到报警,网站打不开,赶紧连服务器,结果SSH死活连不上。别急着重启,先检查网络状态。有时候只是VPS商的节点抽风,或者安全组规则被人误改了。用本地命令ping一下IP,不通的话,大概率是网络层的问题。

如果能ping通但SSH连不上,可能是sshd服务挂了,也可能是防火墙拦住了22端口。这时候去控制台看看系统日志,一般云平台都提供VNC登录功能,进去查systemctl status sshd就知道服务有没有在跑。

systemctl status sshd
<?php echo '检查服务状态'; ?>

磁盘满了,删日志也没用?

运维最怕收到“磁盘使用率95%”的告警。删完access.log、error.log发现空间还是没释放?问题可能出在文件句柄没关闭。Linux下即使你删了文件,只要还有进程占着句柄,空间就不会真正释放。

这时候得用lsof查一下:

lsof | grep deleted

看到哪些进程还握着已删除文件的句柄,重启对应服务就行。比如nginx占着旧日志,执行systemctl reload nginx,空间立马就腾出来了。

MySQL突然连不上,密码没错啊

程序报错“Access denied for user”,但密码确认是对的。这种情况八成是mysql.user表里用户权限被改了,或者是host字段限制太死。比如用户root只允许从localhost登录,但从外网IP连自然失败。

进数据库查一下:

SELECT Host,User FROM mysql.user WHERE User='root';

要是Host列只有localhost,那就得加个%允许远程,或者创建新用户授权时明确写上'%'。顺便提一句,别图省事全用root远程访问,安全风险太大。

HTTPS证书到期,网站打不开了

早上一上班,客服电话就炸了:“官网变成红色警告!” 登上去一看,证书过期。Let's Encrypt的证书有效期就90天,自动续期失败的情况不少见。常见原因是.acme.sh脚本权限变了,或者webroot路径被挪动。

手动续一次试试:

/root/.acme.sh/acme.sh --renew -d example.com --force

续完记得重启nginx或Apache,不然新证书不生效。建议提前15天设个定时任务自动续,再配个邮件提醒,省得手忙脚乱。

服务器时间不对,日志对不上

排查问题时发现,应用日志和系统日志差了八小时。一看timedatectl,时区没设对,或者NTP同步关了。时间不准不只是日志混乱,有些安全认证机制也会因此失效。

执行下面命令校准:

timedatectl set-ntp true
timedatectl set-timezone Asia/Shanghai

确保chrony或ntpd服务在运行,定期同步时间。别小看这一步,线上事故复盘时,时间线对不上能拖死人。