Nginx/Apache/MySQL 重启失败?五步定位故障根源
在服务器进行运维的过程当中, 重启服务属于是最为常见的基本操作, 然而却偏偏特别容易出现状况。好多的站长在碰到nginx: [emerg] bind() to 0.0.0.0:80 failed这样的报错情况, 或者是遇到Failed to restart mysql.service: Unit not found这些报错状况的时候, 通常都会感到一头雾水。下面直接就给出实用的方法内容, 按照优先级来进行排查。
一、端口被占用(最常见)
排查命令:
sudo netstat -tlnp | grep :80
sudo lsof -i :80
要是察觉到进程占用了80/443端口, 那就运用kill -9 PID去杀掉先前的进程, 然后再度启动。
要留意, Apache以及Nginx是不可以同时对80端口进行监听的, 是需要二选其一的事情。
二、配置文件语法错误
修改配置后重启失败,大概率是写错了。
Nginx 检查:
nginx -t
Apache 检查:
apachectl -t
MySQL 检查:
mysqld --verbose --help | grep -A 1 'Default options'
# 然后直接查看错误日志
tail -100 /var/log/mysql/error.log
如果报错行号,直接用 vim 定位修改。
三、SELinux/AppArmor 拦截(Linux 环境)
安装于阿里云或者腾讯云的Nginx, 其重启遭遇失败状况,这有可能是受到SELinux进行限制的缘故。
临时关闭:
setenforce 0
进行永久关闭操作: 对 /etc/selinux/config 予以编辑事宜, 把其中的 SELINUX=enforcing 变更为 disabled 状态。
四、MySQL PID 文件残留
MySQL服务重启之际, 出现提示Can't connect to local MySQL server through socket, 非常有可能性是, /var/run/mysqld/mysqld.pid文件没有被彻底删除干净。
解决方案:
rm -rf /var/run/mysqld/mysqld.pid
systemctl restart mysql
五、systemd 服务未启用
遭遇失败, 无法重启nginx.service, 原因是单元未被找到, 这意味着服务未进行注册。
手动注册:
systemctl enable nginx
systemctl restart nginx
要是仍旧未生效, 那就查看 /etc/systemd/system/ 这个路径下面有没有相应的 service 文件, 要是没有的话, 那就从 /lib/systemd/system/ 把它复制过去。
关键要点归纳: 重新启动流程遭遇失败并非可怕之事, 占据问题整百分之八十范畴系集中于端口被占用状况、语法层面出现的错误、SELinux相关问题、PID呈残留状态以及systemd未处于启用这般五类情况。往后再碰到报错情形, 按照此既定顺序展开排查审视, 常规状况下三分钟之内能够将问题精准定位出来。
否玩代码编辑 https://www.fouwan.com


