crontabを編集してcronを登録してみる
cronとは
cron とは、ジョブ(スクリプト)を自動実行するためのデーモンプロセスです。
この後も上を参考に書きます。
どうやって設定するのか
crontab -e
でcronのコマンドを登録するファイルであるcrontabをvimで編集することが出来ます。
linuxではなくmacの10.9.3なのですが、crontabはどこに置いてあったかというと、
/usr/bin/crontab
でした。
ためしに、
0-59/1 * * * * echo "hello"
と書いて保存します。
すると、
/var/mail/woshidan(username)
に
From woshidan@woshidan-no-MacBook-Air.local Mon Dec 8 16:54:00 2014
Return-Path: <woshidan@woshidan-no-MacBook-Air.local>
X-Original-To: woshidan
Delivered-To: woshidan@woshidan-no-MacBook-Air.local
Received: by woshidan-no-MacBook-Air.local (Postfix, from userid 501)
id 291421F36C49; Mon, 8 Dec 2014 16:54:00 +0900 (JST)
From: woshidan@woshidan-no-MacBook-Air.local (Cron Daemon)
To: woshidan@woshidan-no-MacBook-Air.local
Subject: Cron <woshidan@woshidan-no-MacBook-Air> echo "hello"
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=woshidan>
X-Cron-Env: <USER=woshidan>
X-Cron-Env: <HOME=/Users/woshidan>
Message-Id: <20141208075400.291421F36C49@woshidan-no-MacBook-Air.local>
Date: Mon, 8 Dec 2014 16:54:00 +0900 (JST)
hello
というようなログが1分ごとに出力されていて、
とりあえず定時で自動的に出力されているのが確認できます。
このechoのところをrails runnerとかに変えてバッチ処理を回したい感じです。
さて、大変なことになるので即刻戻します。
コマンドの書き方について
さっきの
0-59/1 * * * * echo "hello"
ですが、
分 時 日 月 曜日 コマンド
の順になっています。
各数の部分について、
* はいつでもという意味です。
m-l
は曜日の部分で行えばm曜日からl曜日の間に、という指定になります。
m-l/n
は分の部分で行えばm分からl分の間でn分ごとに、という指定になります。
a,b,c,d
は分の部分で行えばa分,b分,c分,d分が来るごとに、という指定になります。
もっと細かいことは、cron の設定ガイドで確認してください。
wheneverを使うと
railsでcronならwheneverでしょ、という話になっていますが、
wheneverはcrontabに書くべきコマンドを綺麗に吐き出してくれるgemです。
細かいことは
https://github.com/javan/whenever
や
Wheneverは導入が超簡単なcrontab管理ライブラリGemです![Rails4.1] - 酒と泪とRubyとRailsと
を見てください。
wheneverize .
で作成したconfig/schedule.rbに書いたrubyでタスクを
whenever
でcrontabに書き込む形で標準出力してくれます。
deploy先に登録するのは、capstranoのデプロイするツールのお仕事みたいです。
これは終わって理解したら書きます。
[2015/1/1追記]
capistrano3のデプロイ時の設定ファイルconfig/deploy.rbに
# Whenever setup
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
を足し、
wheneverizeの設定ファイルのconfig/schedule.rbに
set :environment, :production
という形で、動作環境を書いておいたら、capistrano3でデプロイしただけでcronが登録されてました。
あまりにあっさりすぎて引きました(え)
わざわざ3とついているのはcapistranoは2系と3系で結構文法がちがうからです。ご注意ください。