背景
发现宝塔的nginx没有在运行,于是在宝塔面板上手动重启,但是提示失败,失败信息是下面那样:
警告消息:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] still could not bind()
原因
原因是nginx服务被卡死,导致80端口被占用,地址已经被使用。
解决这一问题的办法,我们得找到占用80端口的服务进程,并结束它。
解决办法
用 netstat -ntpl
来查看端口使用情况
root@woo2:/www/server/panel# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6822/nginx.conf
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 6672/pure-ftpd (SER
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1769/sshd
tcp 0 0 0.0.0.0:888 0.0.0.0:* LISTEN 6822/nginx.conf
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 20242/python
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1943/sendmail: MTA:
tcp 0 0 127.0.0.1:587 0.0.0.0:* LISTEN 1943/sendmail: MTA:
tcp6 0 0 :::21 :::* LISTEN 6672/pure-ftpd (SER
tcp6 0 0 :::22 :::* LISTEN 1769/sshd
tcp6 0 0 :::3306 :::* LISTEN 19710/mysqld
可以看到进程pid 6822占用了80的端口,导致nginx无法启动。
我们只要将6822进程结束就行了
root@woo2:/www/server/panel# kill 6822
结束后再次查看端口使用情况
root@woo2:/www/server/panel# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 6672/pure-ftpd (SER
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1769/sshd
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 20242/python
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1943/sendmail: MTA:
tcp 0 0 127.0.0.1:587 0.0.0.0:* LISTEN 1943/sendmail: MTA:
tcp6 0 0 :::21 :::* LISTEN 6672/pure-ftpd (SER
tcp6 0 0 :::22 :::* LISTEN 1769/sshd
tcp6 0 0 :::3306 :::* LISTEN 19710/mysqld
发现已经没有80端口在使用中了。
然后就可以在宝塔面板上或者使用
service nginx start
命令来启动nginx服务了。