【CentOS7】cronの設定方法

Time4VPSのCentOS7でのcron設定方法をまとめています。

なお、CnetOS7のサーバーであればサーバー会社によらずこのページは有効です。

cronとは?

まず簡単にcronとは何か?を説明しておくと、「 (時間指定による) 定期的なプログラム自動実行機能」です。

下のように自由に時間を指定できます。

  • 毎時○分
  • 毎日○時○分
  • 毎週○曜日
  • 毎月○日

「いついつに毎回このプログラムを動かしたい!」というときにcronを利用すれば幸せになれます。

仕組み

cronは「crond(デーモン)」と「crontab」ファイルで構成されており、

  1. 一分ごとにcrondが起動する
  2. crontabに記述されたスケジュールを確認する
  3. スケジュールの条件を満たしたプログラムを実行する

このような仕組みになっています。

設定方法

cronの設定方法は2つあります。

  1. crontabコマンドで設定
  2. 「/etc/」配下にあるcron関係のディレクトリで設定

これらの設定方法は後述します。

cronの起動

CentOS7をインストールしただけではcronは有効化されていません。

次のコマンドでcronを起動させてください。

systemctl start crond.service

ちなみに再起動のコマンドも載せておきます。

systemctl restart crond.service

自動起動の設定

これでcronは起ち上がりますが、もしもサーバーがシャットダウンしたり再起動した場合、cronも同時にシャットダウンします(自動では起動しません)。

そのため、次のコマンドでcronの自動起動を設定しておきましょう。

systemctl enable crond.service

状態確認

次のコマンドを実行することでcronの現在の状態を確認できます。

systemctl status crond.service

cronが問題なく立ち上がっている場合は次のテキストが出力されます。

* crond.service – Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-01-11 20:36:15 EET; 1 day 19h ago
Main PID: 143 (crond)
CGroup: /system.slice/crond.service
`-143 /usr/sbin/crond -n

もしもcronが起ち上がっていない場合は次のテキストが出力されます。

Unit cron.service could not be found.

この場合は上で紹介したコマンドを実行してcronを起ち上げてください。

cronのログを確認

tail -f /var/log/cron

cronの設定

cronの設定方法をまとめます。

上の「cronの起動」で説明したようにcronを起動させておいてください。

1.crontabコマンドで設定する

次のコマンドを入力します。

crontab -e

すると、cron設定画面が出てくるのでキーボードの「i」を押して編集モードにして次のテキストを記述します。

15 4 * * * shutdown -h now

次に「エスケープキー」を押して「:wq」と入力して「エンターキー」を押します。

そしてcronを再起動させます。

systemctl restart cron.service

これで毎日4時15分にサーバーを再起動させることができます。

そして、次のように記述すれば、毎月10日5時30分に指定したファイル(パーミッションは700)に書かれたプログラムが実行されます。

30 5 10 * * /var/www/html/hogehoge.sh

なお、次のようにすれば5分毎に指定したファイルに「hoge」と入力できます。

*/5 * * * * echo “hoge” >> /var/www/html/hogehoge.txt

ちなみに、次のコマンドでcrontabで指定された一覧を確認できます。

crontab -l

2.cron関係のディレクトリで設定

cronに関係するディレクトリの場所をまとめておきます。

  • /etc/cron.hourly/
  • /etc/cron.daily/
  • /etc/cron.weekly/
  • /etc/cron.monthly/

読んで字のごとくそれぞれ「時間ごと」「日ごと」「週ごと」「月ごと」に分けられており、そのフォルダに実行ファイルを置くことでそのタイムスケジュールでcronによって実行されます。

他にも次のファイル、ディレクトリがあります。

  • /etc/crontab
  • /etc/cron.d

「/etc/crontab」について

「crontab」ファイルはcron実行の作戦本部です。

このファイルはとても重要なのでコピーをとって利用します(後述します)。

「/etc/cron.d」について

「/etc/cron.d」ディレクトリにファイル(拡張子はいらない!)を入れておくとそのファイルに指定されたものが実行されます。

今回はこのディレクトリを使用してcronを設定してみます。

「cron.d」ディレクトリでの設定

ということで、具体的にディレクトリでのcron設定をやってみましょう。

1. 「crontab」ファイル のコピー

「crontab」ファイルを 「/etc/cron.d」ディレクトリに「my-cron」という名前でコピーします。

cp /etc/crontab /etc/cron.d/my-cron

2.編集する

今作成したcron設定用ファイル 「my-cron」を編集します。

vi /etc/cron.d/my-cron

すると、次のようなテキストが表示されます(cronの設定方法が書かれているので一読する)。

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

編集方法ですが、キーボードの「i」を押して編集モードにして、「↓」で一番下までいき、次に「→」で左端まで行き、「エンターキー」で改行して次のテキストを記述します。

15 4 * * * shutdown -h now

そして、「エスケープキー」を押して「:wq」と入力して「エンターキー」を押します。

これで毎日4時15分にサーバーが再起動されるcronが設定できました。

次のコマンドでcronを再起動して設定を反映させてください。

systemctl restart cron.service

Tips

今回、 「/etc/cron.d」ディレクトリにてcronの設定を行いましたが、以下のディレクトリに入れれば文字通りの間隔でcronが実行されます。

  • /etc/cron.hourly/
  • /etc/cron.daily/
  • /etc/cron.weekly/
  • /etc/cron.monthly/

ただし、これらはサーバーが設定した時間間隔で行うため、自分が指定した時間に設定したい場合は「crontab」ファイルに以下を記述してください。

# 毎時15分に実行
15 * * * * root run-parts /etc/cron.hourly

# 毎日13時15分に実行
05 13 * * * root run-parts /etc/cron.daily

# 毎週日曜3時35分に実行
35 3 * * 0 root run-parts /etc/cron.weekly

# 毎月9日の5時50分に実行
50 5 9 * * root run-parts /etc/cron.monthly

上は参考程度に書きましたが自分のお好みで設定してください。

なお、「run-parts」は指定したディレクトリに存在するファイルをすべて実行するという意味です。