【问题标题】:Errno::EIO: Input/output error - <STDOUT>Errno::EIO: 输入/输出错误 - <STDOUT>
【发布时间】:2017-01-06 06:18:22
【问题描述】:
class FaxFetchWorker
include Sidekiq::Worker
sidekiq_options :retry => false
def perform(job_id=0)
logger.warn "perform is invoked."
FaxSource.all.each do |source|
...
end
end
end
第 6 行出现错误 Errno::EIO: Input/output error - <STDOUT>
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-3
sidekiq
【解决方案1】:
代码中的#6 行是这样的
logger.warn "perform is invoked."
此代码需要打开 STDOUT 流并且您的错误名称是 Errno::EIO。
在 linux EIO 中,意味着尝试读取/写入当前不可用的流。这可能是由于物理错误或孤立进程(其父进程已死亡)尝试从父进程获取 stdio 或当流关闭时发生的。
【解决方案2】:
工作人员可能仍在后台运行,但不再有权访问 STDOUT。
即这些工人仍在继续处理工作,但在打印方面,他们抱怨 EIO。
(在我的情况下,这是由于杀死 tmux 服务器而不杀死工作人员造成的。执行ps -ef | grep resque 就可以了。)
解决方案:
杀死那些工人并开始新的工人。
例如pkill resque-1.25.2(或任何工人的名字)
【解决方案3】:
对我来说重启 redis 解决了它:service redis restart