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

目次

(確認環境: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
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]#

関連の記事

CentOS コマンド一覧 (Linux)

△上に戻る