ラベル cron の投稿を表示しています。 すべての投稿を表示
ラベル cron の投稿を表示しています。 すべての投稿を表示

2014年10月30日木曜日

wheneverで特定のENV環境のみタスクを追加する方法

RailsのCron管理をしてくれる、Github - javan/whenever
本番環境だけとか、ステージング環境だけcronのタスクを追加という場合の対処方法です。
@environmentをcase文で分岐する方法です。
以下のサンプルコードでは、production環境では、rake ‘batch:rate’が追加されて、staging環境では、rake ‘batch:test:rate’されます。
サンプルコード
case @environment

  # 本番のみタスク
  when 'production'

    every '0 * * * *' do
      rake 'batch:rate'
    end
  when 'staging'
    every '0 * * * *' do
      rake 'batch:test:rate'
    end

end

2014年10月2日木曜日

bash の脆弱性 Shell Shockに対応

bashの脆弱性が見つかったといこで、その対応のため、bushをアップデートしました。
診断手順や対策については、こちらを参考にしましたが、ざっくりと手順を下記します。

診断方法

以下のコマンドを実行してみます。
cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo
もし、セキュリティホールが残っているようであれば/tmp/echoに日時のファイルが作成されます。

対策

sudo yum update bush
で、 yum update bush 後にサーバーを再起動したくなかったので、以下を実行。
/sbin/ldconfig
したのですが、cronが停止していることが判明しました。
/var/log/cron で logを確認したところ
FAILED to authorize user with PAM (Module is unknown)
上記のエラーメッセがでていたので
cronのデーモンを再起動して対応しました。
/etc/init.d/crond restart

2014年10月1日水曜日

Railsのcron管理 Gem wheneverの導入方法

Railsでcron管理に便利なgem wheneverの導入方法です。
公式のgitHubはこちら

gemのInstall

gemfileに以下を追加して、bundle installを実行
Gemfile
# cron
# https://github.com/javan/whenever
gem 'whenever', :require => false

設定ファイル(schedule.rb)の作成

projectのディレクトリに移動してから、設定ファイル生成コマンドを実行
$ cd /apps/[my-project]
$ wheneverize .
そうすると
./config/schedule.rb
が作成されます。

schedule.rbの作成の設定

呼び出し可能な job type

wheneverでは、下記の4つのjob typeをschedule.rbに設定することができます。
job type メソッド 使用例
bashコマンド command command “/usr/bin/some_great_command”
rakeタスク rake rake “some:great:rake:task”
Railsのメソッド runner runner “MyModel.some_method”
scriptファイル script script “script/my-script.sh”

時間の設定

3時間毎
every 3.hours do
  rake "my:rake:task"
end
毎日 AM4:30に実行
every 1.day, :at => '4:30 am' do
  rake "my:rake:task"
end
1時間毎に実行
every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
  runner "SomeModel.ladeeda"
end
日曜日pm12時に実行
every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday
  runner "Task.do_something_great"
end
27~31日の00:00に実行
every '0 0 27-31 * *' do
  command "echo 'you can use raw cron syntax too'"
end
このcron(分,時,日,月,曜日)の書き方が慣れているので普段はこれを使っています。

crontabへの反映,削除

上記で設定した内容をcrontabへ反映したり、削除させるための、下記コマンドが用意されています。

crontabへの追加

whenever -w

crontabからの削除

whenever -c

2014年9月23日火曜日

cronが動作しているか確認する5つの項目

あれっ!?クーロン動いてるの?って思ったことは無いでしょうか?
そんなときは、以下の5点を確認してみてください。
  1. デーモンの確認
  2. サービス自動起動の設定の確認
  3. 実行権限の確認
  4. クーロンログの確認
  5. スクリプ自体のログを確認

1.デーモンの確認

下記のコマンドを実行して、クーロンのデーモンが実行中になっていることを確認
# /etc/rc.d/init.d/crond status 
crond (pid  1346) を実行中...

2.サービス自動起動の設定の確認

chkconfig –list crond
2~5までがonになっていることを確認
# chkconfig --list crond
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off

3.実行権限の確認

実行するファイルの実行権限が付いているか確認
# ls -al
-rwxr-xr-x 1 root root  9376  2月  9 10:39 2013 script.sh
もし、実行権限が付いていないようであれば、権限を変更する
# chmod 755 script.sh 

4.クーロンログの確認

クーロンログを確認する
# tail -100 /var/log/cron
以下のようなエラーが出ていたら
Sep 22 16:01:01 ip-10-0-4-29 crond[3465]: (root) FAILED to authorize user with PAM (Module is unknown)
クーロンを再起動で対処できるようです。
/etc/init.d/crond restart
or
sudo service cornd restart

5.スクリプ自体のログを確認

スクリプトのログを設定する

* * * * * /bin/sh /script.sh >>/var/log/script.log 2>>/var/log/script-error.log
/var/log/script.logに標準出力のログ、/var/log/script-error.logにエラーログが出力されるので、そのログを確認する。

statistics