gpt4 book ai didi

ruby-on-rails - delayed_job -i 通过 cron 脚本通过 ruby​​ 停止之前的进程后将不会启动

转载 作者:数据小太阳 更新时间:2023-10-29 07:36:19 24 4
gpt4 key购买 nike

所以我遇到了一个奇怪的情况,我有 delayed_job 2.0.7 和守护进程 1.0.10 以及 ruby​​ 1.87 和 rails 2.3.5 在 Scientific Linux 6.3 版(Carbon)上运行。

我有一个 rake 任务,每晚重新启动延迟的作业,然后进行一堆批处理。我以前只是做 ruby​​ script/delayed_job 停止然后开始。我添加了一个命名队列的反向端口,允许我执行命名队列。因此,正因为如此,我想为每种类型的命名队列启动几个进程。为此,我发现最好的方法似乎是使用 -i 以不同方式命名每个进程,以免它们发生冲突。

我编写了一些 ruby​​ 代码来执行此循环,它在开发中运行良好,在命令行上运行良好,在从 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 - 命名进程时才会发生,并且只有在我停止它们然后尝试启动它们时才会发生。如果我删除停止点,那么一切正常。

同样,这仅在我使用 cron 时出现。

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

所以我的问题是,如果您之前在同一个 ruby​​ 进程中停止了这些命名的 dj 进程,那么 cron 有什么不同的做法会导致它们无法启动?

谢谢乔尔

最佳答案

好吧,我终于想通了,当检查cron是否会发送电子邮件时,我们发现sendmail坏了,sendmail想要的mysql版本没有安装,所以我们修复了它,然后我们的问题就神奇地消失了.我仍然会向任何能够准确解释原因的人提供赏金..

关于ruby-on-rails - delayed_job -i 通过 cron 脚本通过 ruby​​ 停止之前的进程后将不会启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com