Rakeタスク実行時、プロセス起動数を確認して排他制御する

More than 1 year has passed since last update.

例えばシェルでやるならこうだけど、rubyで完結させたい。
(シェルスクリプトからrakeを実行したらいいだけだけどメンドクサイ。)

do_something.sh
#!/bin/sh

# プロセス起動確認
isAlivePs=`ps -ef | grep "do_something" | grep -v grep | wc -l`
if [ $isAlivePs = 0 ]; then
  # プロセスが起動していなければ実行
  echo "DO SOMETHING"
else
  # プロセスが起動していた場合は終了
  echo `date` ALREDY RUNNING PROCESS
fi

exit 0

Rakeタスク内でのプロセス数確認する。

scheduler.rake
task :do_something => :environment do
  puts "[#{Time.now.strftime("%Y/%m/%d %H:%M:%S")}] Do something..."

  # プロセス起動確認
  is_alived_ps=`ps -ef | grep "do_something" | grep -v grep | wc -l`
  is_alived_ps_cnt = is_alived_ps.to_i

  # プロセス数 2以下の場合のみ実行
  if is_alived_ps_cnt<=2
    Rails.logger.info("Do something")
  else
    Rails.logger.info("Skip do something")
  end
end
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.