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」で保存します。
# 毎月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
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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。