Cron/ja

このガイドでは、Gentoo Linuxにおけるcronデーモンのセットアップと利用方法を説明します.

cronとは何か
Cron is a daemon that runs scheduled tasks based on input from the command. It accomplishes this task by waking up every minute and checking to see if there are any cron-jobs to run in any of the user crontabs.

デファクトのcron
There are a few cron implementations to choose from in Portage. All of them offer a similar interface, namely the use of or a similar command. There is also a related utility called Anacron which is meant to work with cron on systems that are not continuously running.

また、現在利用可能な全てのcronパッケージがに依存していることは強調すべきです. 技術的には、どのcronパッケージもこのパッケージに依存していません. しかし、このパッケージは大部分のユーザに有益でcronに似た機能を提供します.

cronを動作させる前に、適切なcron実装が選択されていなければなりません. このガイドでは、Gentoo Linuxで利用可能なcron実装を説明します.

vixie-cron
vixie-cronは、SysV cronベースで全ての機能を実装したcronです. ユーザ毎にcrontabを持ち、その中で環境変数を指定することが可能です. その他のcronと異なり、vixie-cronはSELinuxとPAMをサポートしています. サポートするアーキテクチャはdcronよりは少ないですが、fcronよりは多いです.

の特徴


 * SELinuxのサポート
 * PAMのサポート
 * crontabで環境変数を設定可 (PATH、SHELL、HOME等)
 * ユーザ独自のcrontabを持つことが可能. とによるアクセス制御.

cronie
cronie はvixie-cron のフォークで、Fedora で開発されました. このためcronieはオリジナルのvixie-cronと同じ特徴を持ちます. さらに、cronieは anacronの機能も実装しています. この機能を利用するには USEフラグを有効にする必要があります.

dcron (Dillonのcron)
Dcron aims to be a simple, elegant and secure implementation of cron. It does not allow the specification of environment variables in crontabs and all cron-jobs are run from. Like vixie-cron, each user has his own crontab.

の特徴


 * Fast, simple and free of unnecessary features;
 * Access to is limited to the cron group, i.e. it doesn't rely on any external faculties.

fcron
fcronはvixie-cronとanacronの置き換えを意図しています. 連続稼働しないシステムで動作できるよう設計されていて、いくつかの拡張機能を持っています. それは「ジョブがスタートするための条件設定」、「ジョブのシリアライゼーション制御」、「ジョブにnice値を付与する機能」、「システム起動時に動作するジョブのスケジュール」です. さらに詳細な情報についてはfcron's home pageを参照してください.

の特徴


 * 連続稼働しないシステムで動作するように設計されています. つまり、システム停止中のため動作できなかったジョブを再起動後に実行できます.
 * 環境変数やその他多くのオプションをcrontabで設定できます.
 * 多くの新機能と共に、拡張されたcrontab記述をサポートします.
 * 各ユーザーはとでアクセス制御可能なcrontabを持つことができます.

bcron
bronはセキュアなオペレーションを念頭に置いて設計された新しいcronシステムです. これを実現するため、cronシステムはいくつかのプログラムに分割され、それぞれが別のタスクに対して責任を持つことになりました. また、それらタスク間のコミュニケーションは厳格に制御されました. ユーザインターフェースは、よく似たシステム（例 vixie-cron）の単純な置き換えですが、内部の実装は大きく異なっています. より詳細な情報についてはbcronのホームページhttp://untroubled.org/bcronを参照してください.

の特徴


 * vixie-cronの単純置き換え
 * マルチプロセス設計
 * 地域毎の夏時間サポート

anacron
anacronはcronデーモンそのものではなく、cronデーモンと組み合わせて動作します. anacronは指定された間隔でコマンドを実行し、システムが連続的に稼働することを前提とせず、シャットダウンのために実行されなかったジョブをリブート後に改めて実行します. 通常、anacronは毎日動作するcronデーモンに依存しています.

インストール
目的にあった適切なcronを選択し、emergeしてください.

選択されたcronデーモンがシステムのinitプロセスに追加されたことを確認してください. 追加されていない場合、cronデーモンはジョブを開始しません.

オプションとして、cronデーモンのヘルパーとしてanacronをインストールすることは良い選択です. ただしfcronがインストールされていないことが条件です.

anacronをインストールした場合は、anacronをシステムのinitプロセスに確実に加えてください.

システムcrontab
The post install messages from some of these cron packages instruct the user to run. The file is the system crontab. A cron installation can use it in conjunction with to run the scripts in. Note that only vixie-cron and cronie schedule jobs in automatically. Dcron and fcron users will need to run every time they make changes to the  file.

Please note that jobs scheduled in the system crontab might not show up in the list of cron-jobs displayed by running.

Of course, users can choose not to use any system crontab at all. If dcron or fcron has been chosen, do not run. If vixie-cron, cronie or bcron has been chosen comment all lines in.

sedコマンドでファイルの全ての行をすばやく簡単にコメントアウトできます. に対して次のコマンドを実行してください.

信頼できるユーザーにcronへのアクセス権を与える
root以外でcronデーモンにアクセスする場合は、このセクションが参考になるでしょう. そうでない場合は次のセクションScheduling cron-jobsに進んで下さい.

選択したcronパッケージに関わらず、あるユーザーにcrontabへのアクセスを許可する場合、そのユーザはcronグループに所属しなければなりません. 例として、次のコマンドはユーザ"wepy"をcronグループに追加します.

dcronの場合、上記の手順だけでユーザーはcrontabにアクセスできるようになります. よってdcronユーザは次のセクションScheduling cron-jobsに進んでください. その他のユーザーはこのまま本セクションを読み進めてください.

fcronの場合はとを編集します. 最もシステムを安全に保つ方法は、最初にで全てのユーザーを拒否して、次に明らかに許可したいユーザーのみで許可することです.

もし、あるユーザー（ここで再度wepyを例にとります）が独自のcronジョブをスケジュールしたい場合、次をに追加してください.

vixie-cronかcronieの場合は、単にを編集します.

例として、ユーザー"wepy"にアクセス権を与える場合、にwepyを追加します.

cronジョブのスケジューリング
crontabを編集する手順はcronパッケージ毎に異なります. しかしそれらすべては同じ基本コマンド群をサポートしています. 例えばcrontabの作成、置き換え、編集、消去、crontab中のジョブのリストアップといったことを実行します. 次のリストは、それぞれのパッケージ毎にどのようにコマンドを実行するかを示しています.

これらのコマンドを実施する前に、crontabそのものを理解することがまず必要です. crontab中のそれぞれの行は、５つのフィードを次の順序で持ちます. 分（0～59）、時間（0～23）、日（1～31）、月（1～12）、曜日（0～7、月曜日が1で日曜日が0もしくは7）. 曜日と月は3文字の略称で表すこともできます. 例えばmon、tue、jan、feb等です. それぞれのフィールドは範囲で表すこともできます. 例えば1-5やmon-friといった記述です. カンマで分離された記述（例：1,2,3やmon,tue,wed）や刻み幅を使った範囲指定（例：1-6/2は1と3と5を示します）も可能です.

少し混乱するかもしれませんが、いくつかの記述例を見ればそれほど複雑でないことがわかるでしょう.

何がどう影響するのかをテストするために数個のcronジョブで確認しましょう. 最初に次のファイルを作成します.

このcrontabファイルを上のコマンドリストの"crontab新規作成"コマンドを使って作成しましょう.

スケジュールされたcronジョブを確認するため、コマンドリストの"cronジョブの表示 "に記載されているコマンドを使用します.

とよく似たリストが得られるはずです. 表示されない場合は、おそらく適切でないコマンドをcrontabに与えたのでしょう.

このcrontabは2ヶ月毎に、毎日、毎時間、毎分、"I really like cron"を出力するはずです. 明らかにユーザはcronが気に入ったときにそれをするのでしょう. このcrontabは1月と2月の毎日16時30分に、"I like cron a little"を出力します. また1月1日の3時10分に"I don't really like cron"を出力します.

もしanacronを使っている場合は、このままこのセクションを読み続けてください. もしanacronを使っていない場合は、次のセクションEditing crontabsに進んでください.

anacronユーザはを編集します. このファイルは4つのフィードを持っています. それぞれ「何日毎に実行するか」、「anacron実行の何分後にジョブを実行するか」、「ジョブの名前」、「ジョブの実行コマンド」です.

For example, to have it run every 5 days, 10 minutes after anacron is started, enter the following:

anacronはanacrontabファイルに記載のすべてのジョブを完了後、終了します. これらのジョブが毎日実行されるかどうかを確認するためにcronデーモンが使用されます. 次のセクションの最後に、これがどのように扱われるかを記載します.

crontabの編集
現実的に、ユーザーがどれぐらいcronを好きかをシステムに逐一報告させることを希望するユーザーはいないでしょう. 次のステップとして、上記のコマンドリストの消去コマンドに相当するものを使用して、これまで使用したサンプルのcrontabを消去しましょう. 消去した後はリストコマンドを使用して、cronジョブがすでに動作していないことを確認しましょう.

No cron-jobs should be displayed in the output from. If cron jobs are listed, then the remove command failed to remove the crontab; verify the correct remove command for the system's cron package.

Now that we have a clean state, let's put something useful into the root crontab. Most people will want to run on a weekly basis to make sure that mlocate works properly. To add that to the system's crontab, first edit again so that it looks like the following:

この例では、cronは毎週月曜朝の午前2時22分にupdatedbを起動します. 適切な新規作成コマンドを上のコマンドリストから選択、実行してください. 実行後、もう一度リストをチェックしましょう.

Now let's say should be ran on a daily schedule in order to keep the Portage tree up to date. This could be done by first editing and then using  as was done in the example above, or by using the proper edit command from the table above. This provides a way to edit the user's crontab in situ, without depending on external files like.

The above command should open the user's crontab with an editor. For example, if is to be run every day at 6:30 A.M., make the crontab look something like this:

ジョブがスケジュールされたことを今一度確認するため、前述の例のようにcronジョブのリストを確認してください. もし期待しているものが全て表示された場合、ロックンロールの準備OKです.

cronbaseを使う
最初に述べたように、すべてのcronパッケージはに依存しています. このcronbaseパッケージはと、と呼ばれるスクリプトを生成します. デフォルトのは以下のようになっていることに注意してください.

このファイルの詳細に立ち入るのはやめて、これらのコマンドは毎時、毎日、毎週、毎月スクリプトを実行するものとしましょう. cronジョブをスケジューリングするためのこの方法にはいくつかの重要なメリットがあります.


 * これらのジョブがスケジュールされた時刻にコンピューターがオフだったとしても、再起動後にジョブは実行されます.
 * パッケージのメンテナーにとって、明確に定義された場所にスクリプトを設置することは容易です.
 * 管理者はcronジョブとcrontabがどこに保存されているか、正確に知ることが可能です. これにより、これらシステム構成物のバックアップおよびリストアが容易になります.

anacronを使う
先に記述したとおり、anacronは（ほとんどのデスクトップインストールがそうであるように）連続稼働しないシステムで使用されます. anacronのデフォルトの設定ファイルはであり、通常は以下のようになります.

anacrontabと他の一般的なcrontabとの違いは、anacronはジョブをスケジュールするにあたり、ランとランの間の時間間隔のみ設定し、固定した日時を指定しないことです. anacron起動時、anacronはの内容をチェックして、最後のランから期限が切れたエントリーがないかどうか計算します. もしこのようなエントリが存在した場合、そのコマンドは再度起動されます.

最後の留意点として、システムにインストールされた他のcronとオーバーラップするエントリはコメントアウトしなければなりません. 例えば以下のvixie-cronのcrontabはその例です.

オーバーラップをコメントアウトしない場合、日、週、月の部分は、cronデーモンとanacronによって異なる時間に実行されます. これにより二重にジョブが実行されるかもしれません.

最後に
個々のcronパッケージは互いに異なり、機能的にも大きな幅を持っていることを覚えておいてください. 使用しているcronデーモンにあわせて、crontab、fcrontab、anacrontab等のmanページをよく理解してください.

Good luck!

トラブルシューティング
cronが正しく動作しない場合、以下のチェックリストが役に立つかもしれません.

cronは起動していますか?
cronが起動しているかどうかを検証するため、cronがプロセスリストに存在しているかどうかを確認してください.

cronは動作していますか?
次を試してみてください.

上記を実施後、が定期的に更新されているか確認してください.

そのコマンドは動作していますか?
同様に、標準エラー出力もリダイレクトしてみましょう.

cronはジョブを起動していますか?
cronのログを確認してください. 通常、エラーはもしくはに記録されます.

はありますか？
通常、cronは何か問題が発生した時はメールを送付します. メールが届いていないか、もしくはが生成されていないか確認してください.

cronの代替
いくつかのホスティング会社はcronへのアクセスを許可していません. ただし、有償、無償を問わず、多くのcron代替をみつけられるでしょう.


 * EasyCron