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

Dip*_*hal 9 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
Run Code Online (Sandbox Code Playgroud)

Errno::EIO: Input/output error - <STDOUT>在第6行遇到错误

med*_*e24 11

代码中的#6行是这样的

    logger.warn "perform is invoked."
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

工作人员可能仍在后台运行,但不再有权访问 STDOUT。

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

(在我的情况下,它是由杀死 tmux 服务器而不杀死工作人员引起的。做一个ps -ef | grep resque,他们就在那里。)

解决方案:

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

例如pkill resque-1.25.2(或任何工人的名字)