cron はスケジュールデーモンであり、指定された時間間隔でタスクを実行します。これらのタスクは cron ジョブと呼ばれ、システムのメンテナンスや管理タスクを自動的に実行するために主に使用されます。たとえば、データベースやデータのバックアップ、最新のセキュリティパッチを使用してシステムを更新する、ディスクスペースの使用状況をチェックする、電子メールを送信するなど、繰り返し実行するタスクを自動的に実行するために cron ジョブを設定することができます。cron ジョブは分、時、日、月、週のいずれか、またはそれらの任意の組み合わせで実行することができます。
cron のいくつかの利点#
以下は cron ジョブを使用するいくつかの利点です:
ジョブの実行時間をより細かく制御できます。たとえば、分、時、日などまで正確に設定できます。
ループタスクのロジックをコーディングする必要がなくなります。タスクの実行が不要になった場合は、直接終了することができます。
ジョブは実行されていない場合にメモリを占有しませんので、メモリの割り当てを節約することができます。
ジョブが失敗し、何らかの理由で終了した場合、適切な時間に再度実行されます。
cron デーモンのインストール#
幸運なことに、Fedora Linux はシステムの重要なタスクを実行するために事前に設定されており、cron、anacron、at、batch などのユーティリティがいくつか用意されています。この記事では cron ユーティリティのインストールに焦点を当てます。cron と cronie パッケージは一緒にインストールされ、cronie パッケージは cron サービスも提供します。
パッケージが既に存在するかどうかを確認するには、rpm コマンドを使用します:#
$ rpm -q cronie Cronie-1.5.2-4.el8.x86_64
cronie がインストールされている場合、cronie パッケージのフルネームが返されます。インストールされていない場合は、未インストールと表示されます。
以下のコマンドを使用してインストールします:#
$ dnf install cronie
cron デーモンを実行する#
cron ジョブは crond サービスによって実行され、設定ファイルの情報を読み取ります。ジョブを設定ファイルに追加する前に、crond サービスを起動するか、インストールする必要があります。crond とは何か?crond は cron デーモンの略称です。crond サービスが実行されているかどうかを確認するには、次のコマンドを入力します:
$ systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre>
Active: active (running) since Sat 2021-03-20 14:12:35 PDT; 1 day 21h ago
Main PID: 1110 (crond)
上記のような Active: active (running) since... という内容が表示されない場合は、crond デーモンを起動する必要があります。現在のセッションで crond サービスを実行するには、次のコマンドを入力します:
$ systemctl run crond.service
起動時に自動的に設定するには、次のコマンドを入力します:
$ systemctl enable crond.service
何らかの理由で crond サービスを停止したい場合は、次のように stop コマンドを使用します:
$ systemctl stop crond.service
再起動するには、restart コマンドを使用するだけです:
$ systemctl restart crond.service
cron ジョブの定義#
cron の設定#
以下は cron ジョブの設定の詳細な例です。これは単純な cron ジョブを定義し、git のマスターブランチの最新の変更をクローンしたリポジトリにプルするものです:
*/59 * * * * username cd /home/username/project/design && git pull origin master
主に 2 つの部分から構成されています:
最初の部分は*/59 * * * *です。これはタイマーが59分ごとに設定されていることを示しています。
行の残りの部分はコマンドです。コマンドはコマンドラインから実行されるためです。この例では、コマンド自体には3つの部分が含まれています:
ジョブはユーザーusernameの身分で実行されます
ディレクトリ/home/username/project/designに移動します
gitコマンドを使用してマスターブランチから最新の変更をプルします
時間の構文#
前述のように、時間情報は cron ジョブ文字列の最初の部分であり、上記のようになっています。これは cron ジョブの実行頻度と時間を決定します。以下の順序で 5 つの部分で構成されます:
- 分
- 時
- 月の日
- 月
- 曜日
以下はより図解的な方法で構文を説明するものです:
.--------------- 分 (0 - 59)
| .------------- 時 (0 - 23)
| | .---------- 月の日 (1 - 31)
| | | .------- 月 (1 - 12) または jan、feb、mar、apr ...
| | | | .---- 曜日 (0-6) (日曜=0または7)
| | | | | または sun、mon、tue、wed、thr、fri、sat
| | | | |
* * * * * user-name command-to-be-executed
アスタリスクの使用#
アスタリスク(*)は数字の代わりに使用され、その位置のすべての可能な値を表します。たとえば、分の位置にあるアスタリスクは、1 分ごとに実行されるようにします。以下の例は、より良い理解を助けるかもしれません。
この cron ジョブは毎分実行されます:
* * * * [command]
スラッシュは分の間隔を表します。以下の例では、1 時間に 12 回、つまり 5 分ごとに実行されます:
*/5 * * * * [command]
次の例は、毎月 2 日の深夜(たとえば 1 月 2 日の午前 0 時、2 月 2 日の午前 0 時など)に実行されます:
0 0 2 * * [command]
cron の時間形式については、さらに多くのフォーマット記号がありますが、ここでは展開しません
crontab を使用して cron ジョブを作成する#
cron ジョブはバックグラウンドで実行され、/etc/crontab ファイルや /etc/cron.*/ および /var/spool/cron/ ディレクトリを定期的にチェックします。各ユーザーは /var/spool/cron/ に固有の crontab ファイルを持っています。
これらの cron ファイルを直接編集するべきではありません。cron ジョブを作成、編集、インストール、アンインストール、およびリストアップするための方法は、crontab コマンドです。
さらにクールなことに、新しいファイルを作成したり、既存のファイルを編集した後、cron を再起動する必要はありません。
$ crontab -e
これにより、既存の crontab ファイルが開かれるか、新しいファイルが作成されます。crontab -e を呼び出すと、デフォルトでは vi エディタが使用されます。注意:Nano を使用して crontab ファイルを編集するには、EDITOR=nano 環境変数を設定できます。
すべての cron ジョブをリストアップするには、-l オプションを使用します。必要に応じて、-u オプションを使用してユーザーを指定します。
$ crontab -l
$ crontab -u username -l
すべての cron ジョブを削除するには、次のコマンドを使用します:
$ crontab -r
特定のユーザーのジョブを削除するには、root ユーザーとして次のコマンドを実行する必要があります:
$ crontab -r -u username
cron ジョブはシステム管理者のツールのように見えるかもしれませんが、実際には多くの Web アプリケーションやユーザータスクに関連しています。
参考#
Fedora Linux ドキュメント[1]
cron を使用したタスクのスケジュール[2]