2010年5月12日水曜日

crontab = UNIXで定期的にコマンド実行する方法

UNIX
レンタルサーバーで定期的な自動処理がしたくなった時、2つの方法があります。

o 1つは、CGIプログラムを作って、外部からCGIプログラムを定期的に呼び出す方法。
   + ブラウザから手動実行する事も出来ます。
   + 普通に作ると誰でも実行出来ますので、いたずら防止などの対策が必要になります。
o もう1つは、Windowsの「タスク」のようなものに、登録する方法です。
   + 対応するUNIXコマンドの名前は crontab。
   + 実行条件を曜日毎に変える事も簡単に出来る、便利なコマンドです。

# この他に、ログイン、処理実行、ログアウトの手作業を自動化する方法もあります。
#


**** crontabを使用出来る条件
o sshもしくは telnetなどでログイン出来る事。
o かつ、crontabによるジョブ登録を、サーバーの管理者が禁止していない事。
o 後は、試してみれば分かります。


**** 手順
** crontabコマンドの使い方は「 man crontab 」
o ジョブの一括登録は、「 crontab (ファイル名) 」。
o ジョブの一括削除は、「 crontab -r 」。
o ジョブの一覧表示は、「 crontab -l 」。

o ファイルの作成は、Windowsのメモ帳で編集したファイルをサーバーに転送する方法もあります。
o ジョブ(= タスク)は、登録した人の権限で動くみたいです。
   + 試した時は、実行ファイルのパーミッションを 500にしても動きました。
o ジョブ(= タスク)の起動時、最低限の環境変数しか設定されていません。
   + 必要に応じて、呼び出した実行ファイル側で環境変数を設定します。


**** 登録するファイルの書き方
o 「crontab」でWeb検索すると、沢山出てきます。
o システムによっては、サポートしていない書き方がありますので、確認と対応が必要です。
o 例えば、2時間に1回起動させたい時、「*/2」と書いても動かない場合がありました。
   + この場合は、2時に実行、4時に実行、などと、ジョブ(= タスク)を列挙すると解決します。
o ファイルの中に $HOMEと書いても展開してくれない場合もありました。
   + フルパス(= 完全な書き方)で記述すると、解決します。

** 書き方の例
-------------------
39 * * * * /home/miku/test01.sh
9 3 * * 0 /home/miku/sunday.sh
0 0 9 3 * /home/miku/miku_day.sh
-------------------
o 書式は先頭から、分、時、日、月、曜日(0が日曜日)、実行したいコマンド。半角空白かタブで区切ります。
o システムによって拡張があります。詳しくは、使いたいサーバーで「man crontab」。
# test01.sh = 毎時39分に実行します。
# sunday.sh = 日曜日の3時9分に実行します。
# miku_day.sh = 3月9日の0時0分に実行します。

** コマンドの登録例
o 例えば、上で書いたものを、ファイル名 mycron.txtで保存します。
o 既存の登録の有無を確認します。「crontab -l」
   + 必要なコマンドは、mycron.txtにも追加しておきます。
o 登録を全部削除したい時は、「crontab -r」。
   + 自分が登録したコマンドだけ消えます。
o 登録します。「crontab mycron.txt」。
o 確認します。「crontab -l」。



==
関連ページ:
    ▼UNIX
    ▼コンピューター・プログラムを作る
    ▼制作メモ
    > locale = UNIXで地域設定(ロケール)について確認する
(2010年5月12日追加。書き方の例と実行例)