1. takayukishmz@github

    Posted

    takayukishmz@github
Changes in title
+cronの重複実行を防ぐちょっとした処理
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,40 @@
+
+cron処理で、メール送信のような普通にやると冪等性がない、またはなにかしらの理由で同時に二度やりたくない処理をする場合があると思います。
+
+その場合
+
+```ruby
+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側から見れるようにして
+
+```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タスクに入れれば防げます。
+
+
+### 参考
+
+* [[Rails][ruby] rake task の多重起動を禁止する排他処理を行う答えを知りたい | 答えを知りたい](http://programming.ironsand.net/2015/rake-task-%E3%81%AE%E5%A4%9A%E9%87%8D%E8%B5%B7%E5%8B%95%E3%82%92%E7%A6%81%E6%AD%A2%E3%81%99%E3%82%8B%E6%8E%92%E4%BB%96%E5%87%A6%E7%90%86%E3%82%92%E8%A1%8C%E3%81%86/)
+* [ruby on rails - How do I use helpers in rake? - Stack Overflow](http://stackoverflow.com/questions/1450112/how-do-i-use-helpers-in-rake)