Chefでcron(crontab)
楽なのか面倒なのかなんだかよくわからないことで定評のあるChefを触ってみた。
とりあえず今回はChef(OpsWorks)でcronを設定する時のメモ。
といってもここをちゃんと読めば何も問題ない。
http://docs.opscode.com/resource_cron.html
英語問題ない人は上記サイトへ。ワタシ英語ヨミタクナイってお仲間は速やかにこちらへ避難してください。
Chef関係のインストールや動作確認方法は以下を参照
http://www.atmarkit.co.jp/ait/articles/1305/24/news003.html
Cookbookのインストール
Cookbookのディレクトリで以下を実行
knife cookbook site download cron
tar.gzが落ちてくるため解凍(バージョンは適宜修正)
tar zxvf cron-1.4.0.tar.gz
cronディレクトリが作成される。
登録
cron/recipies/yourtask.rb を作成(このレシピ名も適宜)
cron "yourtask" do # タスク名(大事) action :create minute "0" hour "7" weekday "1" user "myuser" # 実行ユーザ名 mailto "myuser@calmsfill.com" home "/home/myuser/tasks" # 実行ディレクトリ command "python new_week_has_begun.py" # 実行コマンド end
上記の登録で、毎週月曜日の朝に1週間の始まりをお知らせしてくれる悪魔のようなタスクが登録される。
minute, hour, day, weekday, mouthは設定しないと自動的に *(aster) になる。
英語のページを見るとコマンドは他の書き方も例がある。
command if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi
command %Q{ cd /srv/opscode-community-site/current && env RUBYLIB="/srv/opscode-community-site/current/lib" RAILS_ASSET_ID=`git rev-parse HEAD` RAILS_ENV="#{rails_env}" bundle exec rake cookbooks_report }
タスク名がKeyになっているので大事。タスク名が同じなら実行するたびに上書きされ、新規タスク名なら既存の設定に追記設定される。
削除
cron/recipies/delete-yourtask.rb を作成
cron "yourtask" do action :delete user "myuser" end
actionをdeleteに変えて、タスク名とユーザ名は登録時と同じものを使う。
ここでもタスク名をちゃんと見てくれていて、同じタスク名で登録したタスクのみ削除される。
逆にいえば、このcookbookで登録したタスク以外は消すことが出来ないからその辺りは統一しなきゃならない。
こんな感じで、既に公開されているレシピをダウンロードして使うだけだと簡単。
自分で1から書こうとすると大変なこと間違い無しだから、公開レシピを上手く使って料理するのが正しいのかもしれない。
cronのレシピでもっと細かい情報が必要な人は以下のページが詳しいです!
http://docs.opscode.com/resource_cron.html
ちなみに、cronじゃなくてcrontabという名前のCookbookも登録されている。(knifeもcrontabで落ちてくる)
http://community.opscode.com/cookbooks/crontab
こっちはtemplates配下に置いたcronスクリプトファイルをそのまま登録するタイプ。
既存のものがあるならこっちのほうが楽かも。