Как используется код python в crontab в centos 7 при автоматическом обновлении сертификатов?

#python #cron #centos7 #certbot

#python #cron #centos7 #certbot

Вопрос:

Я собираюсь настроить crontab для автоматического обновления сертификата lets-encrypt. У меня centos7.

Ниже приведена моя команда для crontab.

 0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' amp;amp; certbot renew 
  

Я знаю только то, certbot renew что сертификат будет обновляться до истечения срока действия. И 0 0,12 * * * это время cron, этот cron будет выполняться в полдень и полночь в день.

Какая польза от этой команды python? Просто я не знаю следующую часть cron.

python -c 'import random; import time; time.sleep(random.random() * 3600)'

Комментарии:

1. Я почти уверен, что тот же код будет выполняться в любой системе, похожей на U * x, так что это ни в коем случае не относится к CentOS конкретно.

Ответ №1:

Он отключается в среднем на полчаса, предположительно, чтобы предотвратить попадание всех ботов в мире на сервер точно в тот час, когда они хотят обновления.

Аргументом для time.sleep() является количество секунд, и при рандомизации выбирается значение от 0 до 3600.

Если бы у вас был Bash, вы могли бы сделать что-то подобное с sleep $((RANDOM/10)) ; но cron задания по определению выполняются /bin/sh , а не Bash. ( RANDOM возвращает целое число от 0 до 32767 — правильный делитель был бы чем-то вроде 9.1; но Bash поддерживает только целочисленную арифметику.)

Комментарии:

1. Означает ли это, что мой cron не будет запускаться в точное время?

2. Само задание cron выполняется именно тогда, когда вы сказали; это делается для задержки выполнения certbot команды в этом задании cron, чтобы оно не запускалось немедленно

3. > «отложить выполнение команды certbot в этом задании cron»; означает ли это, что если срок действия моего сертификата истечет, а задание cron не будет запущено немедленно, и мне придется ждать случайное время для обновления моего сертификата?

4. @emeraldhieu Это задание cron выполняется два раза в день, ваш сертификат обновляется, только если срок его действия истекает. Считается, что срок действия сертификата истекает, когда до его истечения остается менее 30 дней. Сертификаты выдаются на 90 дней. Итак, в обычном мире ваш сертификат будет обновляться каждые 60 дней. Возможная часовая задержка не имеет значения, когда у вас есть 30 дней для ее обновления.

Ответ №2:

random.random() возвращает значение с плавающей точкой от 0 до 1 (исключая). Таким образом, random.random() * 3600 вернет любое значение от 0 до 3600 (исключая) и time.sleep будет находиться в режиме ожидания столько секунд.

В случае успешного выполнения python команды ( amp;amp; ) certbot renew будет выполнена повторная загрузка полной команды.