1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VirtualBox CentOS7 cronについて検証してみた

Last updated at Posted at 2022-04-26

はじめに

cronの動作について、復習ために検証しました。

cronについては、以下を参考にしました。
infracollege
https://infracollege.vamdemicsystem.black/linux/

cronは、定期的にジョブを実行します。
crondというデーモンは1分ごとにcrontabファイルを調べて実行しています。

cronは、crontabコマンドと/etc/crontabのファイルとで、2つの方法で設定出来ますが、
どちらかを使用することをおすすめします。

動作環境

VirtualBox
Windows端末
CentOS7使用

事前確認 & 作業

TeraTermでrootユーザーでssh接続する。
一般ユーザーとして、testユーザーを作成する。

crondというデーモンが実行中であることを確認する。active (running)のため、現在実行中です。

[root@localhost ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 火 2022-04-26 07:49:13 JST; 22min ago
 Main PID: 657 (crond)
   CGroup: /system.slice/crond.service
           mq657 /usr/sbin/crond -n

 4月 26 07:49:13 localhost.localdomain systemd[1]: Started Command Scheduler.
 4月 26 07:49:13 localhost.localdomain crond[657]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 39% if used.)
 4月 26 07:49:14 localhost.localdomain crond[657]: (CRON) INFO (running with inotify support)
 4月 26 07:50:01 localhost.localdomain crond[657]: (root) RELOAD (/var/spool/cron/root)
 4月 26 07:56:01 localhost.localdomain crond[657]: (*system*) RELOAD (/etc/crontab)

/var/spool/cron配下はtestユーザーでは、読み取り権限がなくアクセス出来ないため、rootへ昇格出来る様に設定をする。

#/etc/sudoersファイルを編集し、testユーザーにすべてのroot権限が必要なコマンドを実行する権限を追加
以下の行を追加
[root@localhost tmp]#vi /etc/sudoers
test    ALL=(ALL)       ALL 

#設定が追加されたことを確認
[root@localhost tmp]# cat /etc/sudoers | grep test
test    ALL=(ALL)       ALL

検証 crontabコマンドで設定し、rootユーザーとtestユーザーの動作確認

crontab -eコマンドで、エディタを使用して以下の設定をcrontabに入れる。
1分ごとにdateコマンドの結果を出力する。
分( */1 )、毎時( * ) 毎日( * ) 毎月( * ) 毎曜日( * ) 日付コマンド(date)

crontab -lコマンド(設定内容の表示)は、crontab -r(設定内容の削除)と間違いやすいため、
crontabの設定内容の表示は、実際のログファイル「/var/spool/cron/配下」から直接確認したほうが安全です。

rootユーザーの場合

TeraTermを使用して、rootユーザーでSSH接続し、以下のコマンドを実行した。

#crontabを編集する。
[root@localhost ~]# crontab -e
#以下を設定する。
*/1 * * * * echo `date` >> /tmp/date_root.log

#crontabの中身を確認する。
[root@localhost ~]# crontab -l
*/1 * * * * echo `date` >> /tmp/date_root.log

#実際のログは以下に格納されている。
[root@localhost cron]# cat /var/spool/cron/root
*/1 * * * * echo `date` >> /tmp/date_root.log
[root@localhost cron]#

testユーザーの場合

TeraTermを使用し、testユーザーでSSH接続し、以下のコマンドを実行した。

[test@localhost ~]$ crontab -e
#以下を設定する。
*/1 * * * * echo `date` >> /tmp/date_test.log

#crontabの中身を確認する。
[test@localhost ~]$ crontab -l
*/1 * * * * echo `date` >> /tmp/date_test.log

[test@localhost ~]$sudo su -
#実際のログは以下に格納されている。
[root@localhost cron]# cat /var/spool/cron/test
*/1 * * * * echo `date` >> /tmp/date_test.log
[root@localhost cron]#

ログを確認

一分ごとにrootユーザーとtestユーザーのcronが動作していることをログから確認。

# /tmp/date_root.log  cronから出力されたrootユーザーのファイル
# /tmp/date_test.log  cronから出力されたtestユーザーのファイル

# ログの末尾から6行目までを表示
[root@localhost ~]# tail -n 6 /var/log/cron
Apr 26 08:18:01 localhost CROND[1782]: (root) CMD (echo `date` >> /tmp/date_root.log)
Apr 26 08:19:01 localhost CROND[1793]: (test) CMD (echo `date` >> /tmp/date_test.log)
Apr 26 08:19:01 localhost CROND[1794]: (root) CMD (echo `date` >> /tmp/date_root.log)
Apr 26 08:20:01 localhost CROND[1804]: (root) CMD (echo `date` >> /tmp/date_root.log)
Apr 26 08:20:01 localhost CROND[1805]: (test) CMD (echo `date` >> /tmp/date_test.log)

cronのファイルにdateコマンドの結果が出力されていることを確認

[root@localhost tmp]# tail -n 4 date_test.log
2022年 4月 26日 火曜日 08:18:01 JST
2022年 4月 26日 火曜日 08:19:01 JST
2022年 4月 26日 火曜日 08:20:01 JST
[root@localhost tmp]#
[root@localhost tmp]#
[root@localhost tmp]# tail -n 4 date_root.log
2022年 4月 26日 火曜日 08:18:01 JST
2022年 4月 26日 火曜日 08:19:01 JST
2022年 4月 26日 火曜日 08:20:01 JST

検証 /etc/crontabファイルを設定し、rootユーザーとtestユーザーで動作確認

/etc/crontabファイルにrootユーザーとtestユーザーの設定を追加する。
1分ごとにdateコマンドの結果を出力する。

vi /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
*/1 * * * * root echo `date` >> /tmp/date_root_etc_crontab.log ※rootユーザーのcronを追加
*/1 * * * * test echo `date` >> /tmp/date_test_etc_crontab.log ※testユーザーのcronを追加

上記のファイルの設定に、*(アスタリスク)の数が一つ多かったりしたら、ログにBadコマンドと出力れます。

[root@localhost ~]# less /var/log/cron
Apr 25 08:56:02 localhost crond[665]: (CRON) bad command (/etc/crontab)

dateコマンドの結果は一分ごとに出力を確認

# date_test_etc_crontab.log cronから出力されたrootユーザーのファイル
# date_root_etc_crontab.log  cronから出力されたtestユーザーのファイル

[root@localhost tmp]# tail -n 6 /tmp/date_test_etc_crontab.log
2022年 4月 26日 火曜日 08:39:01 JST
2022年 4月 26日 火曜日 08:40:01 JST
2022年 4月 26日 火曜日 08:41:01 JST
2022年 4月 26日 火曜日 08:42:01 JST
[root@localhost tmp]#
[root@localhost tmp]# tail -n 6 /tmp/date_root_etc_crontab.log
2022年 4月 26日 火曜日 08:39:01 JST
2022年 4月 26日 火曜日 08:40:01 JST
2022年 4月 26日 火曜日 08:41:01 JST
2022年 4月 26日 火曜日 08:42:01 JST
[root@localhost tmp]#

ログが出力されているため、動作していることを確認

[root@localhost tmp]# cat /var/log/cron | grep "date_test_etc_crontab.log"
Apr 26 08:39:01 localhost CROND[2201]: (test) CMD (echo `date` >> /tmp/date_test_etc_crontab.log)
Apr 26 08:40:01 localhost CROND[2221]: (test) CMD (echo `date` >> /tmp/date_test_etc_crontab.log)
Apr 26 08:41:01 localhost CROND[2243]: (test) CMD (echo `date` >> /tmp/date_test_etc_crontab.log)
Apr 26 08:42:01 localhost CROND[2270]: (test) CMD (echo `date` >> /tmp/date_test_etc_crontab.log)

[root@localhost tmp]# cat /var/log/cron | grep "date_root_etc_crontab.log"
Apr 26 08:40:01 localhost CROND[2222]: (root) CMD (echo `date` >> /tmp/date_root_etc_crontab.log)
Apr 26 08:41:01 localhost CROND[2246]: (root) CMD (echo `date` >> /tmp/date_root_etc_crontab.log)
Apr 26 08:42:01 localhost CROND[2271]: (root) CMD (echo `date` >> /tmp/date_root_etc_crontab.log)
Apr 26 08:43:01 localhost CROND[2295]: (root) CMD (echo `date` >> /tmp/date_root_etc_crontab.log)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?