Errno :: EIO:输入/输出错误 - <stdout> </stdout>

时间:2014-05-23 03:21:41

标签: ruby-on-rails ruby-on-rails-3 sidekiq

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>

3 个答案:

答案 0 :(得分:11)

代码中的#6行是

    logger.warn "perform is invoked."

此代码需要打开 STDOUT 流,您的错误名称为 Errno :: EIO

在Linux中,EIO意味着尝试读取/写入当前不可用的流。这可能是由于物理错误或孤立进程(其父级已经死亡)尝试从父进程获取stdio,或者当流被关闭时发生的。

答案 1 :(得分:3)

工作人员仍然可以在后台运行但不再能够访问STDOUT。

即。那些工人仍在继续处理工作,但在印刷方面,他们抱怨EIO。

(在我的情况下,它是由于杀死了tmux服务器而没有杀死工人造成的。请ps -ef | grep resque然后他们在那里。)

解决方案:

杀死那些工人并开始新工作。

e.g。 pkill resque-1.25.2(或者无论工人姓名如何)

答案 2 :(得分:-1)

对我来说,重新启动redis解决了它: service redis restart