DelayedJob ERROR:已经有一个或多个程序实例正在运行

时间:2013-07-30 02:42:16

标签: ruby-on-rails ruby linux delayed-job web-worker

一些背景故事:

我的服务器昨晚耗尽了磁盘空间,而delayed_job工作人员正在处理处理图像的作业。

当我试图阻止工人时,我收到“已终止”的回复。

RAILS_ENV=production script/delayed_job stop
Terminated

然后我运行以下内容,看到工人被终止了。

ps -ef | grep delayed_job
servername      4474  4274  0 02:37 pts/1    00:00:00 grep --color=auto delayed_job

现在我尝试启动新员工。

RAILS_ENV=production script/delayed_job -n2 start
ERROR: there is already one or more instance(s) of the program running
ERROR: there is already one or more instance(s) of the program running

这是我得到的错误,即使看起来我已经停止了所有活跃的工作人员,我也无法启动任何新员工。

这令我感到困惑所以我跑了

RAILS_ENV=production script/delayed_job status
delayed_job: running [pid 0]
delayed_job: running [pid 0]

这似乎是错误的[pid 0],似乎我的工作人员已经腐败,我希望弄清楚如何解决这个问题。谢谢!

我在Linux Ubuntu LTS 10.4上运行。

编辑:所以我删除了在tmp / pids中找到的2个工作文件,这些文件允许我启动和停止工作。但是,工作人员不会运行任何东西,因为我认为我需要在tmp文件夹中生成PID文件。

2 个答案:

答案 0 :(得分:6)

我运行此命令来解决问题:

RAILS_ENV=production script/delayed_job -n 2 --pid-dir=tmp/pids restart

通过指定目录,它可以解决缺少PID文件的问题。

答案 1 :(得分:2)

在该文件中放入一些随机pid(不是现有进程的pid),然后尝试启动您的守护进程。您将看到类似于以下内容的消息:

pid-file for killed process 32323123 found (/path/to/pid/file), deleting.

并且你的守护进程将开始。