我已经使用每隔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以下的用户
答案 0 :(得分:0)
Crond分离子进程,所以当你杀死crond进程时,生成的任务将继续他们的工作。
根据ps -ef
的输出判断,rake任务进程附近没有<defunct>
,所以我可以判断它们还活着并且正在运行。
您的佣金任务要么进入无限循环,要么只花费比预期更长的时间。在第二种情况下,它可能是由于网络连接速度慢造成的,例如,如果你调用一些外部API服务,优化的SQL查询或算法,数据库太大,就像这样。
建议:尝试修复您的rake任务或crontab条目,以便在同一个任务已经运行时不运行rake任务。