Crontab 設定の罠

Let’s Encryptで月に1回証明書を強制的に更新するようにcronにスクリプトを設定してあったはずなのに、Let’s Encryptから有効期限の警告メールが送られてきました。

あれ…と思い、crontabに登録されているコマンドを手動で実行すると正常に更新ができる状態。

そこでLet’s Encryptの更新ログを確認してみると…

2019-08-01 03:45:46,218:INFO:certbot.main:Could not choose appropriate plugin: The nginx plugin is not working; there may be problems with your existing configuration.
The error was: NoInstallationError("Could not find a usable 'nginx' binary. Ensure nginx exists, the binary is executable, and your PATH is set correctly.",)
2019-08-01 03:45:46,219:WARNING:certbot.renewal:Attempting to renew cert (example.jp) from /etc/letsencrypt/renewal/example.jp.conf produced an unexpected error: The nginx plugin is not working; there may be problems with your existing configuration.
The error was: NoInstallationError("Could not find a usable 'nginx' binary. Ensure nginx exists, the binary is executable, and your PATH is set correctly.",). Skipping.

なにやらNginxのバイナリが見つからないというメッセージが。

このサーバーではWebサーバーにNginxを使用しているため、Let’s Encryptのnginxプラグインを使用しているのですが、勿論Nginxはインストール済みですし、パッケージでインストールしたのでシステム上はパスが通っている状態でした。

ということは、もしかしてCronのパス設定がおかしいのか…と考えて “/etc/crontab”の設定を確認したものの

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# 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

あれ…設定はちゃんと入っている…

念のため、Let’s Encryptの更新に使用しているrootユーザーのcrontabに次の一行を入れて、本当に上記のパス設定が効いているのか確認してみました。

* * * * * echo $PATH > /tmp/cronpath.log 2>&1

すると

/usr/bin:/bin

アレ…

設定してあったはずのパスよりも全然少ない…

その後確認したところ、どうやらユーザーごとのcrontabについては/etc/cronの指定は無効なようで、ユーザーごとのcronでも先頭にPATHを追加する必要があるようです。

ということで、

sudo crontab -e

としてrootのcrontabを開いた後、次の2行を一番最初に追記します。

SHELL=/bin/bash #cronで使用したいシェル
PATH=/sbin:/bin:/usr/sbin:/usr/bin #cron実行時に通しておきたいpath

この状態で再度確認すると

/sbin:/bin:/usr/sbin:/usr/bin

ちゃんとパスが更新されました!

Let’s Encryptもcron経由で試しましたが、無事動作しました。

まさかPathだったとは…

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG