ruby-on-rails – delayed_job -i通过cron脚本通过ruby将在停止前一个进程后启动

所以我有一个奇怪的情况,我有delayed_job 2.0.7和守护进程1.0.10和
ruby 1.87& rails 2.3.5在Scientific
Linux版本6.3(Carbon)上运行.

我有一个rake任务,每晚重新启动延迟的作业,然后进行一堆批处理.我曾经只做ruby脚本/ delayed_job停止然后开始.我添加了一个命名队列的后端,它允许我做命名队列.因此,我希望启动每种类型的命名队列的几个进程.要做到这一点,我发现最好的方法是使用-i以不同的方式命名每个进程,以便它们不会发生冲突.

我写了一些ruby代码来执行这个循环,它在dev中工作得很好,它在命令行上工作得很好,从rails控制台调用它时效果很好.但是当从cron调用它无声地失败时,调用返回false但没有错误消息.

# this works
system_call_result1 = %x{ruby script/delayed_job stop}
SnapUtils.log_to_both "result of stop all - #{system_call_result1} ***"

# this works
system_call_result2 = %x{mv log/delayed_job.log log/delayed_job.log.#{Date.today.to_s}}
SnapUtils.log_to_both "dj log file has been rotated"

# this fails, result is empty string, if I use system I get false returned
for x in 1..DELAYED_JOB_MAX_THREAD_COUNT
  system_call_result = %x{ruby script/delayed_job -i default-#{x} start}
  SnapUtils.log_to_both "result of start default queue iteration #{x} - #{system_call_result} ***"
end

# this fails the same way
for y in 1..FOLLOWERS_DELAYED_JOB_MAX_THREAD_COUNT
  system_call_result = %x{ruby script/delayed_job --queue=follower_ids -i follower_ids-#{y} start}
  SnapUtils.log_to_both "result of start followers queue iteration #{y} - #{system_call_result} ***"
end

所以我做了很多试验,发现只有当我使用-i-named进程时才会出现这个问题,只有当我停止它们时才会发生,然后尝试启动它们.如果我删除停止,那么一切正常.

这只是在我使用cron的时候.

如果我使用命令行或控制台运行,它可以正常工作.

所以我的问题是,如果您之前在同一个ruby进程中停止了这些命名的dj进程,那么cron可能采用不同的方式导致这些命名的dj进程无法启动?

谢谢
乔尔

最佳答案 好吧,我终于搞清楚了,当检查cron是否会发送电子邮件时,我们发现sendmail坏了,sendmail想要的mysql版本没有安装,所以我们修复了这个问题然后我们的问题神奇地消失了.我仍然会向任何可以解释原因的人提供赏金.

点赞