Об этом проекте
Этот репозиторий предоставляет механизм поддержки активности для бесплатного веб-сервиса Render. Он сочетает рабочий процесс GitHub Actions с небольшим скриптом Node.js, который периодически отправляет HTTP GET-запросы на настроенный целевой URL, чтобы сервис не засыпал из-за отсутствия трафика.
Решаемая проблема: бесплатный планировщик GitHub Actions может задерживать короткие интервалы cron, например каждые 5 минут, когда его серверы перегружены, из-за чего между запусками возникают промежутки. Бесплатные сервисы Render засыпают примерно через 15 минут без трафика, поэтому пропущенные пинги могут приводить к холодным стартам.
Подход, описанный в README:
- Активный 14-минутный сеанс: каждое задание GitHub Actions работает около 14 минут и отправляет пинг каждые 4 минуты (на 0, 4, 8 и 12 минуте).
- Несколько триггеров cron: используются расписания, такие как */10 * * * * и 5,15,25,35,45,55 * * * *, чтобы новые сеансы runner продолжали запускаться.
- Заявленная цель — непрерывное покрытие, поскольку пинги каждые 4 минуты в пределах активного 14-минутного окна остаются ниже 15-минутного порога бездействия.
Возможности:
- Нативные API Node.js 22: используются встроенные fetch() и node:timers/promises без внешних зависимостей npm.
- Логика повторных попыток: до 3 повторов с задержкой 10 секунд при сетевых ошибках или ответах со статусом вне диапазона 2xx.
- Консольный вывод: записываются метки времени ISO UTC, коды HTTP-статусов, время ответа в миллисекундах, результаты успеха или неудачи и счетчики циклов сеанса.
- Ручной запуск: поддерживается workflow_dispatch для немедленного выполнения.
Настройка: целевой URL задается в начале файла ping.js как TARGET_URL и сейчас указывает на конечную точку, размещенную на Render. Чтобы изменить конечную точку, нужно отредактировать эту константу и отправить изменение.
Развертывание: README инструктирует пользователей зафиксировать и отправить обновленные файлы в ветку main, после чего GitHub Actions начнет активный сеанс пинга.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.