无法启动 haproxy 2.4 - 最后一行缺少 LF?

问题描述 投票:0回答:7

基本上就是标题。我正在努力将现有的 haproxy 从 1.5 升级到最新版本。因此,我正在设置一个测试用例,以确保我们的旧设置可以正常工作。但是,当我尝试运行它时,出现以下错误:

[NOTICE]   (28948) : haproxy version is 2.4.1-1ce7d49
[NOTICE]   (28948) : path to executable is /home/user/test/usr/local/sbin/haproxy
[ALERT]    (28948) : parsing [test.cfg:22]: Missing LF on last line, file might have been truncated at position 68.
[ALERT]    (28948) : Error(s) found in configuration file : test.cfg
[ALERT]    (28948) : Fatal errors found in configuration.

我尝试查找它,但找不到任何有关错误的信息。我已经检查过我的配置文件,它使用的是正确的 Unix 格式。另外,我的测试配置适用于旧版本的 HAProxy。

global
   stats timeout 30s
   user root
   group root

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:9090
   default_backend http_back

backend http_back
   balance roundrobin
   server test.server.com 127.0.0.1:8000

此外,我还执行了以下操作来安装 haproxy:

tar xvf haproxy-2.4.1.tar.gz
cd haproxy-2.4.1
#vi to Makefile and set PREFIX to PREFIX = /home/user/test/usr/local
make TARGET=linux-glibc
make install

我的配置文件有什么突出的地方吗?还是我在安装过程中遗漏了什么?

installation makefile configuration haproxy
7个回答
8
投票

我遇到了同样的问题,我尝试使用编辑器。但是,它不起作用。 我通过添加新行解决了这个问题。 我使用了 echo 命令,它起作用了。

echo "" >> /etc/hapee-2.2/hapee-lb.cfg

7
投票

很可能您以某种方式截断了您的配置文件。看起来还可以。
我没有在 2.4 上测试它,但我找到了对它的引用:https://www.mail-archive.com/[email protected]/msg37698.html 并且能够在 2.2 上重现它(它在 2.2 中发出警告,在 2.3 中变成错误(如 haproxy 消息所述),使用这个简单的配置:

defaults
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   mode http
   http-request deny

此配置有效:

# haproxy -c -f test.conf
Configuration file is valid

现在我将把它截断一个字节来重现它:

# wc -c test.conf
149 test.conf
# dd if=test.conf of=test2.conf bs=1 count=148
148+0 records in
148+0 records out
148 bytes copied, 0.00267937 s, 55.2 kB/s
# hexdump -C test.conf
00000000  64 65 66 61 75 6c 74 73  0a 20 20 20 74 69 6d 65  |defaults.   time|
00000010  6f 75 74 20 63 6f 6e 6e  65 63 74 20 35 30 30 30  |out connect 5000|
00000020  0a 20 20 20 74 69 6d 65  6f 75 74 20 63 6c 69 65  |.   timeout clie|
00000030  6e 74 20 35 30 30 30 30  0a 20 20 20 74 69 6d 65  |nt 50000.   time|
00000040  6f 75 74 20 73 65 72 76  65 72 20 35 30 30 30 30  |out server 50000|
00000050  0a 0a 66 72 6f 6e 74 65  6e 64 20 68 74 74 70 5f  |..frontend http_|
00000060  66 72 6f 6e 74 0a 20 20  20 62 69 6e 64 20 2a 3a  |front.   bind *:|
00000070  38 30 0a 20 20 20 6d 6f  64 65 20 68 74 74 70 0a  |80.   mode http.|
00000080  20 20 20 68 74 74 70 2d  72 65 71 75 65 73 74 20  |   http-request |
00000090  64 65 6e 79 0a                                    |deny.|
00000095
# hexdump -C test2.conf
00000000  64 65 66 61 75 6c 74 73  0a 20 20 20 74 69 6d 65  |defaults.   time|
00000010  6f 75 74 20 63 6f 6e 6e  65 63 74 20 35 30 30 30  |out connect 5000|
00000020  0a 20 20 20 74 69 6d 65  6f 75 74 20 63 6c 69 65  |.   timeout clie|
00000030  6e 74 20 35 30 30 30 30  0a 20 20 20 74 69 6d 65  |nt 50000.   time|
00000040  6f 75 74 20 73 65 72 76  65 72 20 35 30 30 30 30  |out server 50000|
00000050  0a 0a 66 72 6f 6e 74 65  6e 64 20 68 74 74 70 5f  |..frontend http_|
00000060  66 72 6f 6e 74 0a 20 20  20 62 69 6e 64 20 2a 3a  |front.   bind *:|
00000070  38 30 0a 20 20 20 6d 6f  64 65 20 68 74 74 70 0a  |80.   mode http.|
00000080  20 20 20 68 74 74 70 2d  72 65 71 75 65 73 74 20  |   http-request |
00000090  64 65 6e 79                                       |deny|
00000094
# haproxy -c -f test2.conf
[WARNING] 193/184514 (10725) : parsing [test2.conf:9]: Missing LF on last line, file might have been truncated at position 21. This will become a hard error in HAProxy 2.3.
Warnings were found.
Configuration file is valid

注意末尾缺少的

0a
。使用
hexdump -C

检查您的配置

4
投票

我在 Windows Docker 上运行 HAproxy 时遇到了这个问题。

从 Notepad ++ 顶部的图标打开

Show All Characters
后(在视图菜单 -> 显示符号 - 显示所有字符中),我可以看到最后一行缺少一个新的行控制字符。

(在 Windows 上,无论是 CRLF 还是 LF,都可以正常工作)

根据此线程中的其他答案,只需在配置文件中的最后一个字符后按 Enter 键即可添加新行。

但注意到同样的错误。

parsing [/usr/local/etc/haproxy/haproxy.cfg:28]: Missing LF on last line, file might have been truncated at position 3. Missing LF on last line, file might have been truncated at position 3.

经过一番尝试和错误,我让它可以进行以下更改。

确保配置文件的最后一个字符是 CRLF 或 LF。 如果有额外的空格,则删除这些空格(在我的例子中,notepad++ 添加了两个空格用于自动缩进,即使在添加新行后也会导致问题) .


1
投票

在部署 Bitnami HAproxy 时,我使用 Rancher 遇到了完全相同的问题。我很快发现构造函数正在添加 |- block chomping Indicator 删除末尾的“0a”。我必须以 yaml 格式编辑文件,确保删除此指示器。

示例:

config: |-
  defalts
    timeout.....

0
投票

frontend http
    bind *:8080
    mode http
    timeout client 10s
    use_backend all

backend all
    mode http
    server s0 nodeapp0:3000
    server s1 nodeapp1:3001


注意: 在配置文件中使用一些换行符(使用 Enter)。这是我的简单 cfg 文件,我使用回车键来处理错误。

工作解决方案:


0
投票

注意:只是其他答案的更新。

事实上,我们只需要在

haproxy.cfg
的末尾添加一个换行符就可以了。

但是如果您使用

Dockerfile
docker-compose.yml
在 docker 上构建和部署 haproxy,请注意:

每当您更改本地计算机上的

haproxy.cfg
时,请尝试先删除
Dockerfile
构建的 haproxy 镜像,然后重新运行
docker compose up -d
命令。

这样做的目的是重新加载由

Dockerfile
构建的 haproxy 图像,以便它将您的更改应用到图像。

我知道这一点是因为我尝试运行

docker compose down
docker compose up -d
甚至
docker compose restart
连续时间,但问题仍然存在。

我花了两个小时才找到这个,希望它对某人有帮助。


0
投票

我们执行以下命令

haproxy -f /etc/haproxy/haproxy.cfg -c -V

我们收到以下错误,请分享任何解决方案。

[通知] (27306) : haproxy 版本是 2.6.16-1ppa1~focal [注意] (27306):可执行文件的路径是 /usr/sbin/haproxy [ALERT] (27306):配置:解析 [/etc/haproxy/haproxy.cfg:35]:“前端”需要一个参数 [警报] (27306):配置:在配置文件中发现错误:/etc/haproxy/haproxy.cfg

© www.soinside.com 2019 - 2024. All rights reserved.