Linuxでスケジューラを利用して繰り返しジョブを実行する!(cron)

スケジューラを利用して、繰り返しジョブを実行します。

スケジューラが起動していることを確認する!

スケジューラ(crond.service)が起動していることを確認します。

$ systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-02-16 20:28:25 JST; 10h ago
 Main PID: 1215 (crond)
    Tasks: 1 (limit: 11263)
   Memory: 1.5M
   CGroup: /system.slice/crond.service
           └─1215 /usr/sbin/crond -n

スケジュールを登録する!

「crontab -e」コマンドでスケジュールを登録します。

$ crontab -e
*  *  *  *  * sleep 10

登録したスケジュールを確認する!

「crontab -l」コマンドで登録したスケジュールを確認します。

$ crontab -l
*  *  *  *  * sleep 10

その他の方法でジョブを定義する!

crontab以外に以下のファイルでジョブの実行を定義することができます。

  • /etc/cron.hourly/ ディレクトリ内のプログラムは 1 時間に 1 回実行されます。
  • /etc/cron.daily/ ディレクトリ内のプログラムは 1 日に 1 回実行されます。
  • /etc/cron.weekly/ ディレクトリ内のプログラムは 1 週間に 1 回実行されます。
  • /etc/cron.monthly/ ディレクトリ内のプログラムは 1 カ月に 1 回実行されます。

以下のディレクトリにスケジュールを定義したファイルを配置して定義することもできます。

# ls -l /etc/cron.d
total 8
-rw-r--r--. 1 root root 128 Jun 12  2019 0hourly
-rw-r--r--. 1 root root 108 Jan 11  2021 raid-check

更に、以下のファイルでも定義できます。

# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

crontabコマンドのセキュリティを設定する!

atコマンドについては、以下のファイルで使用できるユーザを制限することができます。

特定のユーザのみcrontabコマンドを使用可能とする!

以下のファイルを作成して、ユーザを記述します。

/etc/cron.allow

特定のユーザのみatコマンドを使用不可とする!

以下のファイルのみ作成して、ユーザを記述します。「/etc/cron.allow」が存在すると、こちらのファイルは無効になります。

/etc/cron.deny

おわりに

繰り返しジョブを実行したい場合は、cronを使用します。定義する場所が多いですが、一般のユーザがスケジュール登録する場合は、crontabコマンドで登録します。

関連記事

関連書籍(Amazon)

N/A