安装了一个新的 Ubuntu 10.04 服务器并以 root 身份登录我使用 apt-get 安装了 haproxy。
我可以直接将 haproxy 作为守护进程运行,但是当我什么都不做/etc/init.d/haproxy start
时……甚至没有错误消息。
netstat -a
显示没有使用我试图与 haproxy 平衡的 http 端口...
想法?
编辑
我注意到
apt-get install haproxy
最后是这样说的:update-rc.d:警告:/etc/init.d/haproxy 缺少 LSB 信息 update-rc.d:见http://wiki.debian.org/LSBInitScripts
/etc/default/haproxy
说ENABLED=1
调试输出sh -xv /etc/init.d/haproxy start
#!/bin/sh
#
# chkconfig: - 85 15
# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited \
# for high availability environments.
# processname: haproxy
# config: /etc/haproxy.cfg
# pidfile: /var/run/haproxy.pid
# Source function library.
if [ -f /etc/init.d/functions ]; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
+ [ -f /etc/init.d/functions ]
+ [ -f /etc/rc.d/init.d/functions ]
+ exit 0
root@li267-63:~#
编辑
/etc/default/haproxy
并确保它有一行写着ENABLED=1
。默认值为启用 = 0。这样做是因为 haproxy 没有健全的默认配置,因此您需要先配置它,然后启用它。
我遇到了同样的问题,由于“测试”行总是失败,因此设置 ENABLED 无效。找到原因:您必须编辑
/etc/default/haproxy
而不是初始化脚本。我知道这是一岁的线程..但只是想分享我学到的东西..
使用
/etc/init.d/haproxy reload
或service haproxy reload
它会重新加载正常..毕竟我们只是希望它正确启动;)我有一个类似的问题。我已经设置了 ENABLED=1,但默认的 update-rc.d 配置似乎是将 haproxy 放在 K20 (rc0|1|6.d) 和 S20 (rc2|3|4|5.d) 中。这意味着它将尝试在联网之前启动,所以在我的情况下,我在 boot.log 中得到了这个:-
将启动号码更改为 35 似乎可以解决问题,但我认为 36 会更安全(网络的旧号码是 35,所以最好让它在那之后开始)。所以尝试: -
然后重新启动,它应该对其进行排序。包维护者真的应该想到这一点。
您是否尝试以 root 或 sudo 启动它?如果您像我一样,有时会忘记将 sudo 添加到命令的前面。我在没有 sudo 的情况下尝试了您的所有命令,但正如您所描述的那样,它们都失败了。但是,在它们前面使用 sudo,使用
haproxy.cfg
install 中的默认文件,它现在可以正常运行。只是想我会指出,即使使用正确的配置,对我来说,没有 sudo 也不会成功。我在第一次安装 ubuntu 维护的软件包之后遇到了同样的问题,然后(在意识到该版本不支持我需要的功能之后)安装一个 ppa 较新版本的 haproxy。我最终使用的 init.d 脚本指向 /usr/sbin/haproxy,而实际上我的可执行文件位于 /usr/local/sbin/haproxy。前面提到的调试输出“sh -xv /etc/init.d/haproxy start”使这个问题非常明显。
我刚刚在 lucid 上遇到了与 haproxy init.d 脚本相同的问题。我根本无法启动 haproxy,所以我查了一下,发现您必须更改 /etc/init.d/haproxy 脚本中的 ENABLED 变量。
但是,更改此变量根本没有帮助,这就是原因:在 /etc/init.d/haproxy 中的几行下方,脚本使用以下行检查 ENABLED 变量: test "$ENABLED" != "0" || 退出 0。我注意到这个测试在我的系统上总是会失败,不知道 ENABLED 的值是多少。所以脚本的其余部分永远不会运行。
我必须承认我真的不知道为什么这条测试线不能正常工作。但是,既然我们无论如何都希望启用 haproxy,为什么还要检查呢?...注释掉这条测试线使它对我有用。
希望这对任何人都有帮助。
我还一直盯着 scipt 看,尽管
ENABLED=1
在 init-script 中定义了它,但我不明白为什么它不起作用。最终,在向下看了一下之后,您会发现
/etc/default/haproxy-file
是在执行测试之前获取的,因此覆盖了 init 脚本本身中的 set-variable...使用 debian vm 在 azure 上遇到同样的问题。结果很简单。haproxy 的 init 脚本使用运行时依赖。在较旧的系统上 update-rc.d 是要走的路,但在较新的系统上使用 insserv:https ://wiki.debian.org/LSBInitScripts/DependencyBasedBoot
因此,如果您使用 update-rc.d 在较新的系统上添加 haproxy 服务,您应该这样做:
$ sudo update-rc.d -f haproxy 删除
$ sudo insserv haproxy