cron - Linux

cron とは?

時間を指定して定期的にタスクを自動実行することができるツールです。

cron と crontab の違いは、「cron」は機能を示す名称で、一方「crontab」はコマンド名またはファイル名です。

cron に関してのファイルまたは、ディレクトリには以下のものがあります。

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.shcronTimeResult.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 に実行