我只是无法让这个工作。该脚本正确地回答,并且PowerDNS认为它正常工作,但是这个过程永远不会超出对其准备就绪的认可。
PowerDNS服务器卡在read()中,端口53上的所有网络连接完全被忽略。服务器启动pdns_server进程以及脚本本身,没有任何反应。记录9级完全没有价值:没有任何反应。除了可以看到脚本中的stderr输出之外,同样适用于“pdns监视器”。
我已经放了脚本here。这是所以令人沮丧...我错过了什么?是io.lines()
电话吗?是因为输入是缓冲的吗?
更新:我正在使用documentation创建此内容。我还查看了其他语言(我知道一些) - 例如v6rev(虽然我不懂Python)和Java中后端的this example。
更新2 我更好地提到这也与gmysql
后端相结合; PowerDNS确实允许多个后端,但我不知道它的具体细节。我确实在配置文件中切换了后端的顺序,之后没有看到任何变化。此外,MySQL查询做工作。没有pipe
后端,MySQL后端处理的事情就好了。
答案 0 :(得分:0)
没有人有任何提示,所以......这就是我发现的。它确实与缓冲相关 - 或者至少是它的外观。代码原来有这样的行:
print("OK\tPowerDNS backend ok")
这些问题是问题所在;用这个顺序替换它们:
print("OK\tPowerDNS backend ok")
io.flush()
然而 - 用以下序列替换它们不工作:
io.write("OK\tPowerDNS backend ok")
io.flush()
据推测,这是因为print()
和io.write()
之间存在一些差异。寻找有关Lua无缓冲I / O的详细信息。可能我应该使用io.stdout.write()
而不是io.write()
。
偶然地,我遇到了this posting到Lua-Users邮件列表,其中提到了setvbuf
功能。但是,setvbuf
函数在Lua 5.1中似乎是新的,因此在Lua 5.0中不可用。