在haproxy系统里面,误操作将/var/run和/var/lock/subsys及其目录下文件权限改成777了,之后重启haproxy服务失败,并且报错:
Starting proxy : cannot bind socket ... ...
关闭服务和重启服务都出现报错,在网上查询的结果说:可能配置文件里面端口号被重复占用了
(1)检查配置文件语法,均显示正常:
# haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid
Configuration file is valid
(2)检查内核参数:
查看/etc/sysctl.conf下面的参数均已存在
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
(3)查看selinux
已关闭
解决方法:
(安装原来的权限修改回去之后貌似还不能正常启动)
最后采取了比较粗暴的方法:杀掉haproxy进程,删除/var/run和/var/lock/subsys目录下的所有文件
[root@haproxy ~]# ps -ef | grep haproxy
haproxy 19182 1 1 Nov10 ? 00:42:55 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
root 24670 24578 0 13:34 pts/0 00:00:00 grep haproxy
[root@haproxy ~]# kill -9 19182
[root@haproxy ~]# rm -rf /var/run/*
[root@haproxy ~]# rm -rf /var/lock/subsys/*
[root@haproxy ~]# /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
[root@haproxy ~]# service haproxy status
haproxy (pid 19182) is running...
原因分析:
/var/lock/subsys的作用:
系统关闭的过程(发出关闭信号,调用服务自身的进程)中会检查/var/lock/subsys下的文件,逐一关闭每个服务,如果某一运行的服务在/var/lock/subsys下没有相应的选项。在系统关闭的时候,会像杀死普通进程一样杀死这个服务。通常与该目录配套的还有/var/run目录,用来存放对应实例的PID.
/var/run下面 pid文件的作用:
防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。