Linux cronでhello worldを表示するサンプル

Linuxのcron(クーロン)でhello worldを表示するサンプルです。(確認環境:CentOS 7)

目次

サンプル cronとは
crondの動作状況を確認する
確認手順1 : cron動作の確認用のshファイルを作成
確認手順2 : cronに記載する
確認手順3 : cronの実行結果をログで確認する
cronの実行処理を停止する(コメントにする)
cronの実行タイミングの設定値
その他:メールを確認する、設定
メールを送信しない設定(>/dev/null 2>&1)

cronとは

  • crondがcrontabファイルに書かれたスケジュールに従ってプログラムを実行します。
  • ユーザーごとに設定できます。

 

crondの動作状況を確認する

systemctl status crond.service
[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ファイルを作成

cronで定期的にshファイルを実行するサンプルを作成します。
そのためのファイルを作成します。

[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でviエディタが開きます。

[test@localhost ~]$ crontab -e
crontab: installing new crontab
[test@localhost ~]$ crontab -l
* * * * * /home/test/test1.sh

1行目のcrontab -eでviエディタが開くので以下(※)を記述します。

※4行目のcrontab -lは1行目で設定した内容を表示しているのでこれをコピペします。

先頭の「* * * * *」は1分毎にtest1.shを実行します。

 

確認手順3 : 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の実行処理を停止する(コメントにする)

crontab -eで設定を開き停止する処理の先頭にコメントの#を入力します。

 

cronの実行タイミングの設定値

cronの設定値は、以下のとおりです。曜日の0と7は日曜です。

1つめの* 2つめの* 3つめの* 4つめの* 5つめの*
分(0-59) 時(0-23) 日(1-31) 月(1-12) 曜日(0-7)

範囲指定(1-3)、
カンマ区切りでの指定(1,2,3)、
繰り返しの指定(*/1)(例:1分毎)もできます。

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分ごとに実行

 

その他:メールを確認する、設定

cronから出力が行われるとメールが送信されます。

/var/spool/mailにメールがあります。

ls -l /var/spool/mail

mailでメールを見れます。エンタキーで次に進みます。xで終了します。pで現在のメールを見ます。hでメールのリストを表示します。

その他、cat /etc/crontab ではcrontabの設定と実行の定義を確認できます。

[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 ~]$ 

 

メールを送信しない設定(>/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」で標準出力を捨てます。

関連の記事

CentOS コマンド一覧 (Linux)

△上に戻る