Other processes take over port 80 when restarting Apache - why, and how to solve?
- by user72149
I have a CentOS 5.5 server running Apache on port 80 as well as some other applications. All works fine until I for some reason need to restart the httpd process. Doing so returns:
sudo /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
First I thought perhaps httpd had frozen and was still running, but that was not the case. So I ran netstat to find out what was using port 80:
sudo netstat -tlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:7203 *:* LISTEN 24012/java
tcp 0 0 localhost.localdomain:smux *:* LISTEN 3547/snmpd
tcp 0 0 *:mysql *:* LISTEN 21966/mysqld
tcp 0 0 *:ssh *:* LISTEN 3562/sshd
tcp 0 0 *:http *:* LISTEN 3780/python26
Turns out that my python process had taken over listening to http in the instant that httpd was restarting. So, I killed python and tried starting httpd again - but ran into the same error. Netstat again:
sudo netstat -tlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:7203 *:* LISTEN 24012/java
tcp 0 0 localhost.localdomain:smux *:* LISTEN 3547/snmpd
tcp 0 0 *:mysql *:* LISTEN 21966/mysqld
tcp 0 0 *:ssh *:* LISTEN 3562/sshd
tcp 0 0 *:http *:* LISTEN 24012/java
Now my java process had taken over listening to http. I killed that too and could then successfully restart httpd.
But this is a terrible workaround. Why will these python and java processes start listening to port 80 as soon as httpd is restarted? How to solve?
Two other comments. 1) Both java and python processes are started by apache from a php script. But when apache is restarted, they should not be affected. And 2) I have the same setup on two other machines running Ubuntu and there's no problem there.
Any ideas?
Edit:
The Java process listens to port 7203 and the python process supposedly doesn't listen to any port. For some reason, they start listening to port 80 when apache is restarted. This hasn't happened before. On Ubuntu it runs fine. For some reason, on my current CentOS 5.5 machine, this problem arises.