crontab - cronで定期実行するプログラムを記述する
cronはプログラムを定期実行するためのアプリケーションですが、その設定ファイルはcrontabというコマンドを使って編集します。
crontabは、ユーザーごとに持つことができます。myappというユーザーでcrontabを編集すると、それはmyappのcrontabになります。
crontabを編集する
crontabを編集するには「-e」オプションを使用します。
crontab -e
エディタが起動します。
もし使用するエディタを切り替えたい場合はselect-editorコマンドを実行してください。
crontabの記述方法
crontabeでは、分 時 日 月 週を指定して、プログラムを定期実行できます。
分 時 日 月 週 コマンド
たとえば、毎時の15分に実行する場合は以下のように書きます。
15 * * * * foo.pl
実行の最低単位は1分です。
「*」は単位毎を意味します。分の位置に「*」が指定された場合は、毎分という意味になります。
毎分実行する場合は以下のようになります。
* * * * * foo.pl
カンマで区切って、複数指定することも可能です。
15,30,45 * * * * foo.pl
「/」記号を使うと、15分毎のような記述ができます。
*/15 * * * * foo.pl
crontabのサンプルは以下に詳しいです。
crontabでユーザーPerlを使用する
crontabののはまりどころのひとつは、perlbrewやplenvでインストールしたユーザーPerlがcronからは利用されないということでしょう。
これはcronから実行するときは、シェルが起動されないのでperlbrewやplenvの設定が記述されている「.bashrc」「.bash_profile」が読み込まれないことが原因です。
一番簡単な解決策は、crontabの中でPATHを、そのユーザーが持っている環境変数PATHの値に書き換えてあげることです。
まずperlbrewをインストールしたユーザーで、PATH環境変数の値を表示します。
env | grep -P '^PATH'
PATHを含んだ環境変数がいくつか表示されるので、PATHというものを探します。(ユーザー名がmyappの場合の例です。)
PATH=/home/myapp/perl5/perlbrew/bin:/home/myapp/perl5/perlbrew/perls/perl-5.20.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
以下のコマンドでcrontabを編集します。
crontab -e
そして上記のPATHの値をcrontabの一番上に書き込みます。
PATH=/home/myapp/perl5/perlbrew/bin:/home/myapp/perl5/perlbrew/perls/perl-5.16.2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/myapp/bin # crontabの設定が続く...
これでcronがインストールしたユーザーPerlを利用してくれるようになります。
Perlのライブラリのパスを追加する
ライブラリのパスがあれば以下のように「PERL5LIB」を設定しましょう。Mojoliciousで作成したアプリケーションをバッチファイルから読み込む場合に必要な記述です。
PERL5LIB=/home/myapp/webapp/lib
cronのエラーが発生した場合のメールの送信先を変更する MAILTO
cronは、標準エラー出力に出力があった場合は、メールを送信するという動作をします。
MAILTOを使えばcronでメールの送信先を変更することができます。crontabの中に次の一行を追加します。
設定しない場合は、cronを実行したユーザーのローカルのメールボックスに入ります。
MAILTO=kimoto_test@perlclub.net
複数のメールアドレスを設定する場合はカンマで区切ります。
MAILTO=kimoto_test@perlclub.net,taro@somehost.com
メールアドレスを設定しておくと、cronで実行しているバッチ処理のエラーを知ることができるので便利です。
crontabの内容をバックアップして保存
-lオプションで内容を表示することができます。リダイレクトして、内容をバックアップすることができます。
crontab -l > crontab_prod
これを、ソースコードと一緒に、Gitで管理しておけば、最悪crontabの設定全てを失うリスクを避けることができます。
crontabに設定をファイルから読み込む
crontabの引数にファイルを指定すると設定をファイルからcrontabに読み込むことができます。
crontab ファイル名
cronの起動・停止・再起動・状態確認, cronの実行ログ
cronの起動・停止・再起動・状態確認, cronの実行ログについては以下の記事を参考にしてくだい。