cron とは?
時間を指定して定期的にタスクを自動実行することができるツールです。
cron と crontab の違いは、「cron」は機能を示す名称で、一方「crontab」はコマンド名またはファイル名です。
cron に関してのファイルまたは、ディレクトリには以下のものがあります。
- /etc
- anacrontab
- cron.d
- cron.daily
- cron.deny
- cron.hourly
- cron.monthly
- cron.weekly
- crontab
上記のファイルやディレクトリの内容は以下の表のようになっています。
ファイル・ディレクトリのパス | 利用者 | 内容 |
---|---|---|
/var/spool/cron/<ユーザー名> | 全ユーザ | ユーザ毎の自動タスク設定ファイル |
/etc/crontab | root | 毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル |
/etc/cron.hourly | root | 毎時実行される自動タスク設定ファイルを置くディレクトリ |
/etc/cron.daily | root | 毎日実行される自動タスク設定ファイルを置くディレクトリ |
/etc/cron.monthly | root | 毎月実行される自動タスク設定ファイルを置くディレクトリ |
/etc/cron.weekly | root | 毎週実行される自動タスク設定ファイルを置くディレクトリ |
/etc/cron.d | root | 上記以外の自動タスク設定ファイルを置くディレクトリ |
設定方法
AlmaLinux9の場合、cron の設定ファイルは、/etc/crontabです。
RedHot系では、/etc/crontabのファイルを直接編集することは推奨されていないため、crontab コマンドか「cron.monthly」、「cron.weekly」、「cron.daily」、「cron.hourly」配下のファイルを編集して設定を行います。
crond が起動しているかどうか確認
crond が起動しているかどうか確認
# Rocky Linux 9
sudo systemctl status crond
# Ubuntu
sudo systemctl status cron
crontab コマンド
crontab コマンドのオプションには、以下のものがあります。
-e | crontabを対話的に編集します |
-l | crontabファイルの内容を表示 |
-r | crontabファイルを削除 |
-u | -u の後にユーザー名を指定。指定したユーザーのファイルを捜査対象とします。rootユーザーのみ利用可能なオプション。 |
cron の登録をするには、以下のコマンドを実行します。
crontab -e
登録されている cron を表示するには、以下のコマンドを実行します。
crontab -l
設定をすべて削除するには、以下のコマンドを実行します。
crontab -r
rootユーザが、testユーザの crontabファイルを表示するには、以下のコマンドを実行します。
sudo crontab -l -u test
自分自身の crontabファイルを編集するには、以下のコマンドを実行します。
crontab -e
実行結果のログを表示
実行結果のログを表示
# Rocky Linux
sudo tail -f /var/log/cron
設定の書き方
以下の書き方の場合、「 毎分 /home/user/test.sh のファイルを実行 」します。
設定の書き方
# 左から、[分] [時] [日] [月] [曜日] [コマンド]
* * * * * /home/user/test.sh
項目 | 設定値 |
---|---|
分 | 0 ~ 59 |
時 | 0 ~ 23 |
日 | 1 ~ 31 |
月 | 1 ~ 12 |
曜日 | 0 ~ 7 ※日が0または7、月が1、火が2、水が3、木が4、金が5、土が6 |
例として、/home/user/cronTime.shを毎分実行するように、cron に登録します。
/home/userに、cronTime.shとcronTimeResult.txtファイルを作成します。
touch cronTime.sh cronTimeResult.txt
作成したファイルの権限を変更します。
chmod 755 cronTime.sh cronTimeResult.txt
cronTime.shの内容を以下のように編集します。ファイルの内容は、cronTimeResult.txtに日付と時刻を書き込むスクリプトです。
#!/bin/bash
date '+%Y/%m/%d %H:%M:%S' >> /home/user/cronTimeResult.txt
以下のコマンドを実行して、cronの編集を行います。内容はcronTime.shを毎分実行するように登録します。
* * * * * /home/user/cronTime.sh
以下のコマンドを実行して、cronTimeResult.txtに、毎分、日付と時刻が書き込まれるか、以下のコマンドを実行して監視してみます。
tail -f cronTimeResult.txt
1分おきに日付と時刻が表示されれば設定はできています。監視を終了するには、Ctrl + cで終了します。
時間の指定方法のサンプル
指定方法 | 内容 |
---|---|
0 1 * * * | 1:00 に実行 |
0 23 * * * | 毎週月曜の 23:00 に実行 |
10 1 1 * * | 毎月 1日の 1:10 に実行 |
0,10 23 * * 1,3,5 | 毎週月、水、金曜の 23:00と 23:10に実行 |
0-59 12 1 * * | 毎月1日の 12:00 から 12:59 まで 1分毎に実行 |
*/10 * * * * | 10分おきに実行 |
* 1 * * * | 1:00 から 1:59 まで 1分おきに実行 |
30 8 1,15 * * | 1日と15日の 8:30に実行 |
10 * * * * | 毎時10分に1時間おきに実行 |
0 13 1 4 * | 4月1日の 13:00 に実行 |