完成工作后,Cron rake任务没有结束

时间:2014-12-24 09:37:31

标签: ruby-on-rails ruby ubuntu cron crontab

我已经使用每隔5分钟运行一次gem来配置rake任务。 rake任务需要10秒才能在本地运行,但是在服务器中,它并没有结束它总是留在进程列表中

ps -ef | grep some_rake_task` 

显示如下输出:

user 22628 22626  0 09:00 ?        00:00:00 /bin/sh -c /bin/bash -l -c 'cd app_direc && rake some_rake_task'
user 22630 22628  0 09:00 ?        00:00:00 /bin/bash -l -c cd app_direc && rake some_rake_task
user 22933 22630  0 09:00 ?        00:00:00 rake some_rake_task
user 22934 22933  0 09:00 ?        00:00:04 ruby /opt/user/app/shared/bundle/ruby/2.1.0/bin/rake some_rake_task
user 25261 25260  0 08:00 ?        00:00:00 /bin/sh -c /bin/bash -l -c 'cd app_direc && rake some_rake_task'
user 25263 25261  0 08:00 ?        00:00:00 /bin/bash -l -c cd app_direc && rake some_rake_task
user 25570 25263  0 08:00 ?        00:00:00 rake some_rake_task
user 25571 25570  0 08:00 ?        00:00:04 ruby /opt/user/app/shared/bundle/ruby/2.1.0/bin/rake some_rake_task
user 26570 26569  0 07:00 ?        00:00:00 /bin/sh -c /bin/bash -l -c 'cd app_direc && rake some_rake_task'
user 26573 26570  0 07:00 ?        00:00:00 /bin/bash -l -c cd app_direc && rake some_rake_task
user 26879 26573  0 07:00 ?        00:00:00 rake some_rake_task
user 26880 26879  0 07:00 ?        00:00:04 ruby /opt/user/app/shared/bundle/ruby/2.1.0/bin/rake some_rake_task
user 30915 30691  0 09:16 pts/2    00:00:00 grep --color=auto some_rake_task

我试图手动杀死进程但是crontab启动的每个任务都保持活着而不是结束。有什么建议吗?

我的佣金任务代码

namespace :some_rake_task do
  desc "Send the email with content"
  task :send => :environment do
    User.find_in_batches do |user|
      SendMailer.newsletter_email(user).deliver
    end
  end
end

但是只有1000以下的用户

1 个答案:

答案 0 :(得分:0)

Crond分离子进程,所以当你杀死crond进程时,生成的任务将继续他们的工作。

根据ps -ef的输出判断,rake任务进程附近没有<defunct>,所以我可以判断它们还活着并且正在运行。

您的佣金任务要么进入无限循环,要么只花费比预期更长的时间。在第二种情况下,它可能是由于网络连接速度慢造成的,例如,如果你调用一些外部API服务,优化的SQL查询或算法,数据库太大,就像这样。

建议:尝试修复您的rake任务或crontab条目,以便在同一个任务已经运行时不运行rake任务。