矛盾する推奨事項を見てきました。 eff.org docs から:
cronジョブまたはsystemdジョブを設定している場合は、1日に2回実行することをお勧めします...更新タスクの時間内にランダムな分を選択してください。
毎週の仕事 の推奨事項も確認しました。
私はcronの専門家ではないので、cronジョブをセットアップするための詳細な手順を含む回答を希望します。
最近(2018年4月)Ubuntu 16.04サーバーにcertbot(バージョン0.22.2)をインストールして実行しました。更新cronジョブが/etc/cron.d/certbotに自動的に作成されました。
作成されたcronジョブは次のとおりです。
# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc. Renewal will only occur if expiration
# is within 30 days.
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew
新しいCronジョブを配置する前に、これを確認してください。
そこで、1日に1回実行するようにスケジューリングすることに決めました。最初に ドキュメントが推奨 :として自動更新をテストしました
Sudo letsencrypt renew --dry-run --agree-tos
次に、crontabを更新しました。
Sudo crontab -e
これは私が追加した行です:
12 3 * * * letsencrypt renew >> /var/log/letsencrypt/renew.log
これにより、毎日午前3時12分に更新が実行されます。私は、ドキュメントが更新サーバーに負荷を分散するために「1時間以内のランダムな分」を推奨していると思います。したがって、0、15、30、または45以外のものが優先されると思います。
Jenkinsでできるように、cron設定で 分をランダム化する を調べました。元のEEFページにはこの例があります。
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew
最後に、 Sudo bash を使用してcronコマンドをテストしました。
Sudo bash -c "letsencrypt renew >> /var/log/letsencrypt/renew.log"
Debian Jessie以上(Ubuntuを含む)では、Certbotの更新のためにcronは実行されません。代わりに、systemdタイマーが使用されます。タイマーを参照:/lib/systemd/system/certbot.timer
このタイマーは次のサービスを実行します:/lib/systemd/system/certbot.service
を含む:
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew
PrivateTmp=true
すべてのタイマーをリストするには、ターミナルで次のコマンドを実行します。
systemctl list-timers
うまくいけば、Certbotはこの一部です:
Mon 2019-02-04 08:38:45 CET 9h左日2019-02-03 15:25:41 CET 8h前certbot.timer certbot.service
更新:
反対票による。 DebianベースのディストリビューションにCertbotをインストールする方法を追加します(Linuxディストリビューションによって異なる場合があります)。
しかし、たとえばDebian Stretch内では、certbot
のバックポートパッケージを次の方法でインストールできます。
Sudo apt-get install certbot -t stretch-backports
これにより、上で示したファイルが自動的にインストールされます!したがって、certbotタイマーが自動的にスケジュールされ、サービスが実行され、更新が再度実行されます。
手動で更新を実行することは常に可能です:
Sudo /usr/bin/certbot renew
--force-renewal
フラグを使用して強制できます。詳細については、更新のヘルプテキストを参照してください。
/usr/bin/certbot --help renew
Certbotパッケージのファイル部分(含むが、それに限定されない):
dpkg-query -L certbot
...
/lib/systemd/system/certbot.service
/lib/systemd/system/certbot.timer
...
通常、Ubuntu 16.04サーバーのWebサーバーでcertbotを実行すると、cronが自動的に作成されます
#cat /etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && Perl -e 'sleep int(Rand(3600))' && certbot -q renew
次の行を/etc/crontab
に追加して、更新試行dailyを00:00の間のランダムな分に実行します16:40:
1 1 * * * root sleep ${RANDOM:0:3}m && /home/admin/certbot-auto renew --quiet --no-self-upgrade --authenticator webroot --installer Apache -w /var/www/mywebroot
現在、1年以上にわたって素晴らしい作品です。
更新コマンド自体はあなたによって異なる場合があります-私はwebrootを使用しましたが、当時は最も堅牢であると思われました。