目次
01. cronとは
・crondの動作状況を確認する(systemctl status crond.service)
02. cronを作成する
・1.cron動作の確認用のshファイルを作成(vi test1.sh)
・2.cronに追加・バックアップ・修正する(crontab -e)
・4.cronの実行結果をログで確認する(tail -5 /var/log/cron)
03. cronの設定例
04. その他
(確認環境:CentOS 7)
cronとは
- crondがcrontabファイルに書かれたスケジュールに従ってプログラムを実行します。
- ユーザーごとに設定できます。
crondの動作状況を確認する(systemctl status crond.service)
systemctl status crond.service |
crondは、cronのデーモンです。動いているか確認します。
[test@localhost ~]$ systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor prese>
Active: active (running) since Tue 2021-10-05 06:16:28 PDT; 2h 24min ago
Main PID: 1453 (crond)
Tasks: 1 (limit: 4770)
Memory: 3.1M
CGroup: /system.slice/crond.service
└─1453 /usr/sbin/crond -n
1行目は、crondを確認するコマンドです。
4行目は、active(running) 稼働中であることがわかります。
1.cron動作の確認用のshファイルを作成(vi test1.sh)
shファイルを作成します。このshファイルをcronで定期的に動かします。
[test@localhost ~]$ pwd
/home/test
[test@localhost ~]$ vi test1.sh
[test@localhost ~]$ chmod 775 test1.sh
[test@localhost ~]$ ./test1.sh
hello world
3行目は、viを使用してtext1.shファイルに以下の内容を記載しています。
viで記載する内容
echo hello world >> test1.txt
echo hello-mail
1行目は、ファイルに文字列を追記します。test1.txtがない場合は作成します。
2行目は、実行したユーザ宛に、本文がhello-mailでメール通知されます。
cronから出力が行われるとメールが送信されます。2行目がない場合はメール送信されません。
2.cronに追加・バックアップ・修正する(crontab -e)
追加する
crontab -e |
crontab -eでviエディタが開きます。
[test@localhost ~]$ crontab -e
crontab: installing new crontab
1行目のcrontab -eでviエディタが開くので以下を記述します。
* * * * * /home/test/test1.sh
先頭の「* * * * *」は1分毎にtest1.shを実行します。
バックアップ
バックアップとして以下のようにテキストに出力できます。
[root@localhost test]# crontab -l > crontab.org
[root@localhost test]# ls -l crontab*
-rw-r--r-- 1 root root 44 7月 4 08:52 crontab.org
[root@localhost test]#
crontabを修正する場合
1.コマンドでテキストに現在のバックアップを取ります。
crontab -l > crontab.bkup
2.バックアップのテキストをコピーします
cp crontab.bkup crontab.new
3.viでコピーしたテキストを修正します。
vi crontab.new
4.diffで差分を確認します。
diff crontab.bkup crontab.new
5.コマンドで新しいファイルのcrontabを反映させます。
crontab crontab.new
6.コマンドで結果を確認します。
crontab -l
※元に戻す場合はコマンドで古いファイルを指定します。
crontab crontab.bkup
3.cronを確認する(crontab -l)
crontab -l |
crontab -lでcronの内容を確認できます。
[test@localhost ~]$ crontab -l
* * * * * /home/test/test1.sh
先頭の「* * * * *」は1分毎にtest1.shを実行します。
4.cronの実行結果をログで確認する(tail -5 /var/log/cron)
tail -5 /var/log/cron |
cronの実行結果を/var/log/cronで確認できます。参照は権限が必要なのでsudo等を使用します。
[test@localhost ~]$ sudo tail -5 /var/log/cron
Jan 4 16:46:01 localhost CROND[4786]: (test) CMD (/home/test/test1.sh)
Jan 4 16:46:28 localhost crontab[4800]: (test) BEGIN EDIT (test)
Jan 4 16:47:01 localhost CROND[4826]: (test) CMD (/home/test/test1.sh)
Jan 4 16:48:01 localhost CROND[4861]: (test) CMD (/home/test/test1.sh)
Jan 4 16:48:43 localhost crontab[4800]: (test) END EDIT (test)
[test@localhost ~]$
cronの実行処理を停止する(コメントにする)
cronの実行処理を停止する場合は、
crontab -eで設定を開き、停止する処理の先頭にコメントの#を入力します。
cronの設定例
00 * * * * /home/test/test1.sh | 毎時00分に実行 |
00 9 * * * /home/test/test1.sh | 毎日9時に実行 |
00 9 5 * * /home/test/test1.sh | 毎月5日の9時に実行 |
00 9 5 4 * /home/test/test1.sh | 4月5日の9時に実行 |
00 9 * * 3 /home/test/test1.sh | 毎週水曜の9時に実行 |
00 3-5 * * * /home/test/test1.sh | 毎日3時,4時,5時に実行 |
00 3,5 * * * /home/test/test1.sh | 毎日3時,5時に実行 |
* */1 * * * /home/test/test1.sh | 毎時00分で1時間ごとに実行 |
* * * * * /home/test/test1.sh | 1分ごとに実行 |
*/5 * * * * /home/test/test1.sh | 5分ごとに実行 |
0 9,10,11 * * 3 /home/test/test1.sh | 毎週水曜日の9,10,11時に実行 |
アスタリスクの場所に意味があります。
1つめの* | 2つめの* | 3つめの* | 4つめの* | 5つめの* |
分(0-59) | 時(0-23) | 日(1-31) | 月(1-12) | 曜日(0-7) |
曜日の0と7は日曜です。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
0(7) | 1 | 2 | 3 | 4 | 5 | 6 |
日
日時の指定として
範囲指定(1-3)、
カンマ区切りでの指定(1,2,3)、
繰り返しの指定(*/1)(例:1分毎)もできます。
メールを確認する、設定
ls -l /var/spool/mail |
cronから出力が行われるとメールが送信されます。
/var/spool/mailにメールがあります。
mailコマンドでメールを見れます。
エンタキーで次に進みます。xで終了します。
pで現在のメールを見ます。hでメールのリストを表示します。
メールを送信しない設定(>/dev/null 2>&1)
>/dev/null 2>&1 |
* * * * * /home/test/test1.sh >/dev/null 2>&1
メールを送信したくない場合は、crontab -eでviエディタを開き「>/dev/null 2>&1」を追記します。
「2>&1」で「2の標準エラー出力」を「1の標準出力」にマージし「>/dev/null」で標準出力を捨てます。
システムのジョブを設定する(/etc/crontab)
cat /etc/crontab は、システムとしてジョブを設定できます。
以下は、/etc/crontabをcatで確認しています。ジョブを実行するユーザを指定できます。
[test@localhost ~]$ 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
[test@localhost ~]$
ユーザのcronを確認する(ls -lt /var/spool/cron/)
ls -lt /var/spool/cron/ |
/var/spool/cron/配下にあります。
[root@localhost test]# ls -lt /var/spool/cron/
合計 8
-rw-------. 1 test test 48 1月 4 17:19 test
-rw-------. 1 root root 44 10月 17 2022 root
[root@localhost test]# cat /var/spool/cron/root
#* * * * * /home/test/test1.sh >> test1.txt
[root@localhost test]#
関連の記事