我在Windows下用Ruby写了一个Slack bot,一切正常,直到我决定在Linux服务器上运行它。当我访问我的shell并运行脚本时,它在前台正常工作,但一旦我将它移动到后台它就会停止工作。我在使用Net :: HTTP的HTTP请求上收到超时错误,或者在套接字读取时收到EOFError。
我在Debian 7上使用Ruby 2.3。
我认为Ruby进程自行停止,因为我只有在将进程返回到前台时才会收到错误,并且如果我在进程在后台时运行ps aux
它就会“列出了T“(停止)标志。
由于我想更熟悉Linux,我想知道是什么导致了这个问题,而不是如何解决它。
编辑:我发现我的用户输入处理程序导致了问题。这是有问题的一点:
def input_handler
return Thread.new {
loop do
user_input = gets.chomp
end
}
end
答案 0 :(得分:0)
问题看起来像是gets
。
默认情况下,gets
从STDIN读取。 The documentation说:
返回(并指定$ _)ARGV(或$ *)中文件列表中的下一行,如果命令行中没有文件,则返回标准输入。
代码/线程将停止并等待来自键盘的提示,或者如果重定向STDIN,则从管道输入读取,或者从作为参数提供的文件读取到命令行上的脚本。