cronについて
特定の時間にプログラムを実行したい場合、cron
と呼ばれる機能を使用します。crontab
コマンドを使用したり、/etc/cron.d
配下に設定ファイルを配置する事でcron
を利用出来ます。
crontab
コマンドは入力ミスすると、設定ファイルが消えてしまう事があります。なので、個人的には/etc/cron.d
配下に設定ファイルを配置した方が良いかなと考えております。
crontabコマンドを使用する。(/var/spool/cron)
crontab
コマンドでよく利用するオプション及び設定ファイルの書式を下記に記載しております。
オプション | 説明 |
---|---|
-l | crontabの内容を表示 |
-e | crontabの編集 |
-r | crontabの削除 |
-u | ユーザーを指定 |
# 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
# | | | | |
# * * * * *
# 5分毎に Check_Disksize.sh を動かす
*/5 * * * * ./Check_Disksize.sh
# 8時に Check_Disksize.sh を動かす
0 8 * * * ./Check_Disksize.sh
crontab -e
コマンドで設定ファイルを編集して保存すると、/var/spool/cron
配下に設定ファイルが生成されます。
現在は設定ファイルを生成しておりませんので、/var/spool/cron
配下には何もありません。
crontab -l
コマンドで設定ファイルの内容を確認しようとしても、設定ファイルがないと出力されます。
[root@localhost /]# ll /var/spool/cron
合計 0
[root@localhost /]# crontab -l
no crontab for root
cron
のテスト用に、Check_Disksize.sh
を作成します。
そして、1分毎に Check_Disksize.sh
を動くように設定してみます。
/var/spool/cron
配下に設定ファイルが生成されている事も確認します。
[root@localhost ~]# vim Check_Disksize.sh
[root@localhost ~]# chmod 755 Check_Disksize.sh
[root@localhost ~]# cat Check_Disksize.sh
#!/bin/bash
date >> Check_Disksize
df -h >> Check_Disksize
root@localhost ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
*/1 * * * * ./Check_Disksize.sh
[root@localhost ~]# ll /var/spool/cron
合計 4
-rw------- 1 root root 30 4月 12 21:12 root
設定出来ました。
では、動いている事を確認します。
[root@localhost ~]# cat Check_Disksize
2023年 4月 12日 水曜日 21:19:01 JST
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 6.2G 1.7G 4.6G 26% /
/dev/sda1 1014M 194M 821M 20% /boot
tmpfs 379M 0 379M 0% /run/user/1000
tmpfs 379M 0 379M 0% /run/user/0
お次は、別ユーザーで7時15分にCheck_Disksize.sh
を動かします。
crontab -u
でユーザーを指定できます。
[root@localhost ~]# crontab -u test_01 -e
crontab: installing new crontab
[root@localhost ~]# crontab -u test_01 -l
15 7 * * * ./Check_Disksize.sh
[root@localhost ~]# ll /var/spool/cron
合計 8
-rw------- 1 root root 30 4月 12 21:12 root
-rw------- 1 root root 31 4月 13 07:09 test_01
[root@localhost ~]# cp -p Check_Disksize.sh /home/test_01
[root@localhost ~]# chown test_01:test_01 /home/test_01/Check_Disksize.sh
[root@localhost ~]# cd /home/test_01
[root@localhost test_01]# ll
合計 4
-rwxr-xr-x 1 test_01 test_01 60 4月 12 21:11 Check_Disksize.sh
[root@localhost test_01]# cat Check_Disksize
2023年 4月 13日 木曜日 07:15:01 JST
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 6.2G 1.7G 4.6G 26% /
/dev/sda1 1014M 194M 821M 20% /boot
tmpfs 379M 0 379M 0% /run/user/1000
上記で動作検証は行えたので、設定ファイルを削除したいと思います。
crontab -r
で削除出来ます。
この-r
が少し曲者です。-e
で編集を行えるのですが、入力ミスで-r
で実行してしまう事がございます。
設定ファイルは編集する際などは、予期せぬ事を防ぐ為にバックアップを取得しておいた方が良いと思います。
[root@localhost ~]# ll /var/spool/cron
合計 8
-rw------- 1 root root 30 4月 12 21:12 root
-rw------- 1 root root 31 4月 13 07:09 test_01
[root@localhost ~]# cp -rp /var/spool/cron /tmp/cron.backup
[root@localhost ~]# crontab -r
[root@localhost ~]# ll /var/spool/cron
合計 4
-rw------- 1 root root 31 4月 13 07:09 test_01
[root@localhost ~]# crontab -u test_01 -r
[root@localhost ~]# ll /var/spool/cron
合計 0
etc/cron.d 配下で設定ファイルを管理
etc/cron.d
配下に設定ファイルを配置する事で、cron
を利用する事が出来ます。設定ファイルの書式を下記に記載しております。
# 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
# test_01ユーザーで、1分毎に Check_Disksize.sh を動かす
*/1 * * * * test_01 ./Check_Disksize.sh
# rootユーザーで、1日15時に Check_Disksize.sh を動かす
0 15 1 * * root ./Check_Disksize.sh
設定ファイルを配置していきます。
8時13分にCheck_Disksize.sh
を動かすように設定しております。
[root@localhost cron.d]# cd /etc/cron.d
[root@localhost cron.d]# ll
合計 4
-rw-r--r--. 1 root root 128 1月 14 2022 0hourly
[root@localhost cron.d]# vim test_01
[root@localhost cron.d]# cat test_01
13 8 * * * test_01 ./Check_Disksize.sh
[root@localhost cron.d]# cat /home/test_01/Check_Disksize
2023年 4月 13日 木曜日 08:13:01 JST
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 6.2G 1.7G 4.6G 26% /
/dev/sda1 1014M 194M 821M 20% /boot
tmpfs 379M 0 379M 0% /run/user/1000
tmpfs 379M 0 379M 0% /run/user/0
以上です。