HAProxy无法启动,无法绑定UNIX套接字[/run/haproxy/admin.sock]。

33

我正在尝试使用一个“空”的配置文件启动haproxy(版本1.5.8 2014/10/31),但是我遇到了以下问题:

user@server:~$ sudo service haproxy start
[....] Starting haproxy: haproxy[ALERT] 126/120540 (7363) : Starting frontend GLOBAL: cannot bind UNIX socket [/run/haproxy/admin.sock]

虽然它已启用:

user@server:~$ cat /etc/default/haproxy 
# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1

配置文件:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL).
    ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
    ssl-default-bind-options no-sslv3

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

有人知道为什么它无法启动吗?


如果我删除以下内容: "stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s",它就可以启动。
- Balazs Varhegyi
有人能解释一下为什么吗? - Balazs Varhegyi
5个回答

75

Haproxy需要写入/run/haproxy/admin.sock,但它不会为您创建目录。请先创建目录/run/haproxy/或将stats socket设置为其他路径。


哇,这个问题花了我四个小时来解决。谢啦! - basickarl
谢谢 @datacarl,我为这个问题挣扎了一整天,你的答案解决了我的问题。 - Pawan Patil

2

我遇到了这个问题,不得不删除 /run/haproxy/admin.sock 文件才能成功重启 HAProxy。我只能想到在中断了 yum update 命令后,它变得损坏了。糟糕!


这几天一直没有进展。删除这个文件导致了一些变化。谢谢。 - Adam Winter

1

在将pfSense从2.4.5更新到2.5.2后,我遇到了这个问题。 正如@datacarl所说,使用pfSense CLI命令mkdir -p /run/haproxy/非常有效。


1

一个systemd服务/程序无法在/run目录中创建自己的文件夹/运行时.pid文件,并且拒绝在没有可写入的文件夹的情况下启动?

您可以在您的systemd服务文件中添加以下行,这行将使systemd服务在运行时自动创建所需的文件夹,并让应用程序写入其中(并在停止时删除该文件夹):

RuntimeDirectory=haproxy

然后:

sudo systemctl daemon-reload
sudo systemctl restart haproxy

这应该是正确的答案。 - Michel

0

关于这个问题有几个要点。了解最新的对话。

我在/run文件夹中创建的所有内容都会在重启后消失。 如果我将其移动到/var/lib/haproxy而不是/run/haproxy,它就可以作为root手动启动。 如果我重新启动它就会失败。不确定是因为它尝试在重启时使用haproxy?如果我su haproxy,它会提示该帐户不可用,但我认为这是因为它设置为nologin。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接