はじめてのVPS初期セットアップ⑦ ~cronによるスケジュール実行(SSL)~

2022/02/23

「はじめての VPS シリーズ」の第7回目です。

前回は Let's Encrypt という無料のSSL証明書を導入しました。

ただ、SSLの証明書の有効期限は三ヵ月です。三ヵ月ごとに、certbot renew コマンドを打ってSSL証明書を更新するのは大変です。

これを今回、cron(クロン)によるスケジュール実行を行い、自動更新されるようにやってみます。

 

前提知識

Let's Encrypt SSL証明書の更新

証明書の更新はrootユーザーで以下のコマンドを実行すると更新できます。


# 証明書の有効期限の残りが30日未満の場合のみ更新
#それ以上の期限が残っている場合は更新されない
[root@example ~]# certbot renew

#有効期限までの残り日数に関係なく、すぐに証明書を更新したい場合
[root@example ~]#certbot renew --force-renew

 

cronの操作方法

crontabファイルは /car/spool/cron/user(※ユーザー毎) に保存されています。

しかし、基本的にはcrontabファイルは直接編集しません。

crontabコマンドを使って編集するのが習わしです。

よく使うコマンドは以下になります。


#-------------------
#crontab の開き方
#-------------------
[root@example ~]# crontab -e
#cronをroot権限で開く
[root@example ~]# crontab -u root -e

#-------------------
#crontab の表示方法
#-------------------
[root@example ~]# crontab -l

#-------------------
#crontab の削除方法
#-------------------
[root@example ~]# crontab -r

 

crontab ファイルの書き方

crontabファイルには「この日付のこの時刻にこのコマンドを実行せよ」という命令を書き込みます。


#初期状態は「*」が5つ並び、1分毎にコマンドが実行される
#「*」の間は半角空ける
[root@example ~]# * * * * * コマンド

「*」 の位置(左端から) 頻度 指定できる数字 備考
1番目 0-59
2番目 0-23
3番目 1-31
4番目 1-12
5番目 曜日 0-7 0と7は日曜日

 


# 例1  毎月10日の午前4時59分にコマンドを実行
59 04 10 * * /home/test01/test.sh

#例2  毎時0分で1時間おきにコマンドを実行
* */1 * * * /home/test01/test.sh

 

前提条件

そもそも cron がちゃんと動いているかのか確認


systemctl status crond

 

実演

 

手順

crontabファイルをroot権限で開く


[root@example ~]# crontab -u root -e

 

crontabファイルにスケジュールを記述

以下のように記述したらコマンドモードで「:wq」で保存します。

今回のように、Let's Encrypt で発行した SSL/TLS 証明書を Apache httpd や Nginx などのWEBサーバに設定している場合は、SSL/TLS 証明書を更新したあとにWEB サーバを再起動する必要があります。

# 毎月1日の深夜4:00に証明書を更新
00 04 01 * * certbot renew

# WEBサーバも再起動させる
# Apache httpd を利用している場合の例(CentOS 6 の場合)
00 04 01 * * certbot renew && service httpd restart

# Apache httpd を利用している場合の例(CentOS 7 の場合)
00 04 01 * * certbot renew && systemctl restart httpd

# Nginx を利用している場合の例(CentOS 7 の場合)
00 04 01 * * certbot renew && systemctl restart nginx

【 cron コマンドの書き方 】
crontabファイルで、cronコマンドの実行を記述する行は、6つのフィールドで形成されています。


[ 分 ] [ 時 ] [ 日 ] [ 月 ] [ 曜日 ] [ コマンド ]

 

フィールド
0 ~ 59
0 ~ 23
1 ~ 31
1 ~ 12 or jan ~ des
曜日 0 ~ 7 or sun ~ dec
コマンド 有効なコマンドを記述します。空白を含むことも可能ですが、標準の Bourne Shell の書式に従って記述します。

 

実演

 

動作確認

次の日に以下のコマンドを実行して、午前3時にコマンドが実行されたか確認します。


[root@example ~]# cat /var/log/cron | grep certbot

 

上記のコマンドを実行して以下のように表示されればOKです。

 
これで証明書の有効期限の残りが30日未満になったら、自動的に更新されるようになります。

以上です。

 

さくらのVPS

Linuxの知識がある方や初心者の枠から脱した人は「VPS」をおススメします!もし、あなたがデザイナーで静的ページのサイトしか作らないのであれば「レンタルサーバー」でOKです。ただ、Webプログラマーとして仕事をするのであればroot権限のあるVPSサーバーを最低1台、自分専用(学習用)を持っておいたほうがいいでしょう。

Laravelプログラマーの初心者が選ぶ学習用サーバーとは?

公式サイトで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-環境構築