Сертификат SSL Let's Encrypt не обновляется автоматически второй раз подряд

Привет, друзья. Мне нужна помощь в устранении неполадок. Уже во второй раз мой SSL-сертификат Let’s Encrypt не продлевается автоматически. Прочитав соответствующие темы здесь, я каждый раз сумел продлить сертификат, удалив старый и пересоздав приложение. Мне казалось, что после этого продление должно происходить автоматически в следующий раз. Но этого не произошло.

Я не вижу никаких признаков того, что где-либо выполняется задача cron, пытающаяся продлить сертификат. Предполагаю, что искать нужно в различных местах на хост-машине, а не внутри Docker-контейнера. Прав ли я? Команда crontab -l выводит «no crontab for root», и в /etc/cron* я ничего не вижу.

В результате я не могу быть уверен, что мой сервер (1) вообще не пытается продлить сертификат или (2) пытается, но терпит неудачу. Кто-нибудь готов помочь мне в диагностике этой проблемы?

К сожалению, поскольку я удалил shared/standalone/{letsencrypt,ssl}, чтобы заново выдать сертификат, у меня нет старых логов для анализа. Как хотя бы проверить, установлена ли задача cron, чтобы я мог просмотреть логи в следующий раз, когда система попытается продлить сертификат?

Спасибо.

Я думаю, что это может быть последний раз, когда такое случалось. В декабре было выпущено исправление:

Большое спасибо, но я бы очень предпочел проверить настройки, чтобы убедиться, что предстоящее продление действительно состоится. Я не знаю, как проверить эти настройки, поэтому сейчас прошу помощи именно в этом.

Кажется, там должен быть cron-задание. Где оно? Я не вижу его в списке на моем сервере. Неужели это не cron-задание, а запланированная задача в Rails?

Я видел в файле /var/discourse/shared/standalone/letsencrypt/acme.sh.log (на хост-системе), что Discourse проверил мой SSL-сертификат, и ответ был: «Он всё ещё действителен». Значит, это, видимо, доказательство того, что Discourse попытается продлить сертификат вовремя.

Теперь я хочу узнать, как настроено это «cron»-задание? Это действительно задание уровня Linux cron или просто периодическая запланированная задача в Rails, реализованная, например, через whenever? Можно ли это проверить без просмотра исходного кода? Могу ли я найти эту информацию через Rails-консоль (или как это называется в 2026 году? Я давно не работал с Rails).

Спасибо.

И кстати, я наконец-то понял, что эта проблема сводилась к недокументированному, не очень понятному и, очевидно, неожиданному «магическому» правилу: «Если строка начинается с /, то она обязательно должна интерпретироваться как регулярное выражение». Я ещё не до конца разобрался во всём контексте, но, похоже, дело именно в этом.

Такова культура «утиной типизации» (Duck Typing): замечательная гибкость, но с риском, что если вы ничего не записываете, клиентов ждёт сюрприз. :wink:

Похоже, было бы разумно усилить Pups::ReplaceCommand, чтобы она тщательнее проверяла, выглядит ли параметр to как регулярное выражение. Или, возможно, нужно исправить логику, которая предполагает, что следует вызывать eval() вместо того, чтобы воспринимать строку как текст замены.

Предполагаю, это относится к категории «уборочных работ, на которые у всех нет ни времени, ни сил»? Если кто-то сможет указать на полезные примеры того, как именно должно вести себя ReplaceCommand, возможно, я смогу выделить немного времени и сил на это.

По крайней мере, у меня теперь более чёткое представление о том, что происходит, хотя эти знания уже начали угасать ещё до того, как я закончил писать это предложение. :person_shrugging: