Мониторинг GitHub Actions по расписанию

Обновлено 2 ноября 2026

Триггер schedule превращает GitHub Actions в бесплатный cron, и многие команды гоняют на нём ночные синхронизации, отчёты и очистку. Но у него есть особенности, которые легко упустить, а запуск, который не состоялся, нигде не отображается как ошибка.

Что нужно знать о workflow по расписанию

Выбирайте нечётную минуту, например 17 вместо 0, чтобы не попадать в самый загруженный момент часа.

Workflow, который отчитывается

Сохраните адрес пинга проверки в секрет репозитория HEARTCRON_URL (Settings → Secrets and variables → Actions) и сообщайте о старте и результате:

name: Nightly sync
on:
  schedule:
    - cron: "17 3 * * *"   # 03:17 UTC, 06:17 по Москве
  workflow_dispatch:

jobs:
  sync:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      - name: Report the start
        run: curl -fsS -m 10 --retry 3 -o /dev/null "${{ secrets.HEARTCRON_URL }}/start" || true

      - name: Sync
        run: ./scripts/sync.sh

      - name: Report the result
        if: always()
        run: curl -fsS -m 10 --retry 3 -o /dev/null "${{ secrets.HEARTCRON_URL }}/${{ job.status == 'success' && '0' || 'fail' }}"

Настройте проверку

Задайте то же выражение 17 3 * * * с часовым поясом UTC. Запас времени ставьте щедрый, потому что запуски часто опаздывают: для ночной задачи разумно 30–60 минут. Алерт придёт, если запуск упал, не завершился или не состоялся вовсе — в том числе в день, когда GitHub отключит расписание в неактивном репозитории.

Много workflow по расписанию

Заведите для каждого workflow свою проверку с именем по файлу workflow и храните адреса в отдельных секретах. Тогда в кабинете Heartcron сразу видно, какие расписания отработали сегодня и сколько длился каждый запуск.

Другие руководства