#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
будет выполнена повторная загрузка полной команды.