您好!欢迎访问否玩代码!
My title page contents
广告位

Nginx/Apache/MySQL 重启失败?五步定位故障根源

栏目: 日期: 浏览:103

在服务器进行运维的过程当中, 重启服务属于是最为常见的基本操作, 然而却偏偏特别容易出现状况。好多的站长在碰到nginx: [emerg] bind() to 0.0.0.0:80 failed这样的报错情况, 或者是遇到Failed to restart mysql.service: Unit not found这些报错状况的时候, 通常都会感到一头雾水。下面直接就给出实用的方法内容, 按照优先级来进行排查。

一、端口被占用(最常见)

Nginx/Apache 重启失败,八成是端口冲突。

排查命令:

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