Help us understand the problem. What is going on with this article?

cronの重複実行を防ぐちょっとした処理

More than 3 years have passed since last update.

cron処理で、メール送信のような普通にやると冪等性がない、またはなにかしらの理由で同時に二度やりたくない処理をする場合があると思います。

その場合

module CronHelper
  def process_already_exists?(task_name)
     process_count = `ps -ef | grep #{task_name} | grep -v grep | wc -l`.to_i
     process_count > 1
  end
end

のようにprocessの数を見て、すでにあるかどうかをruby側から見れるようにして

require "#{Rails.root}/app/helpers/cron_helper"
include CronHelper

namespace :cron do
  namespace :rake_name do

    task :greet do |task|
      next if process_already_exists?(task.name)

      p 'Hello World!!'
    end

  end
end

のようにrakeタスクに入れれば防げます。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away