スケジューラを利用して、繰り返しジョブを実行します。
記事の目次
スケジューラが起動していることを確認する!
スケジューラ(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)