Ubuntuサーバー構築入門

  • Ubuntu 20
  • Ubuntu 18
  • Ubuntu 16

crontab - cronで定期実行するプログラムを記述する

cronはプログラムを定期実行するためのアプリケーションですが、その設定ファイルはcrontabというコマンドを使って編集します。

crontabは、ユーザーごとに持つことができます。kimotoというユーザーでcrontabを編集すると、それはkimotoの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 PATH

PATHを含んだ環境変数がいくつか表示されるので、PATHというものを探します。(ユーザー名がadminsの場合の例です。)

PATH=/home/admins/perl5/perlbrew/bin:/home/admins/perl5/perlbrew/perls/perl-5.16.2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/admins/bin

以下のコマンドでcrontabを編集します。

crontab -e

そして上記のPATHの値をcrontabの一番上に書き込みます。

PATH=/home/admins/perl5/perlbrew/bin:/home/admins/perl5/perlbrew/perls/perl-5.16.2/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/admins/bin

# crontabの設定が続く...

これでcronがインストールしたユーザーPerlを利用してくれるようになります。

Perlのライブラリのパスを追加する

Webアプリケーションで読み込んでいるライブラリのパスがあれば以下のように「PERL5LIB」を設定しましょう。

PERL5LIB=/home/admins/webapp/fudousancms/lib

cronのエラーが発生した場合のメールの送信先を変更する MAILTO

cronは、標準エラー出力に出力があった場合は、メールを送信するという動作をします。

MAILTOを使えばcronでメールの送信先を変更することができます。crontabの中に次の一行を追加します。

設定しない場合は、cronを実行したユーザーのローカルのメールボックスに入ります。

MAILTO=kimoto@somehost.com

複数のメールアドレスを設定する場合はカンマで区切ります。

MAILTO=kimoto@somehost.com,taro@somehost.com

メールアドレスを設定しておくと、cronで実行しているバッチ処理のエラーを知ることができるので便利です。

crontabの内容をバックアップして保存

-lオプションで内容を表示することができます。リダイレクトして、内容をバックアップすることができます。

crontab -l > crontab_prod

これを、ソースコードと一緒に、Gitで管理しておけば、最悪crontabの設定全てを失うリスクを避けることができます。

crontabに設定をファイルから読み込む

crontabの引数にファイルを指定すると設定をファイルからcrontabに読み込むことができます。

crontab ファイル名

cronの起動・停止・再起動・状態確認, cronの実行ログ

cronの起動・停止・再起動・状態確認, cronの実行ログについては以下の記事を参考にしてくだい。