STEADRUN

CLI steadrun

Обновлено 07.11.2026

steadrun — маленькая утилита для задач, которые запускаются не из Laravel: bash-скриптов, бэкапов, скриптов на Python, Node.js или Go. Она оборачивает команду и сама отправляет пинги:

steadrun run ВАШ-UUID -- pg_dump -Fc mydb -f /backup/db.dump

Сниппет с curl в конце строки crontab сообщает только об успехе. С steadrun Steadrun сразу узнаёт и о падении, а в алерт попадают код выхода и последние строки вывода. По ним обычно и видно, что сломалось.

Установка

Это один бинарник без зависимостей. Для Linux на x86-64:

sudo curl -fsSL -o /usr/local/bin/steadrun https://github.com/Steadrun-App/steadrun-cli/releases/latest/download/steadrun-linux-amd64
sudo chmod +x /usr/local/bin/steadrun
steadrun version

На Linux ARM замените в адресе steadrun-linux-amd64 на steadrun-linux-arm64, на Mac с Apple Silicon — на steadrun-darwin-arm64. Контрольные суммы лежат в файле checksums.txt в том же релизе на GitHub. Если установлен Go, можно так: go install github.com/Steadrun-App/steadrun-cli/cmd/steadrun@latest.

Как подключить к cron

Создайте в Steadrun проверку типа «Cron» с тем же расписанием, что у задачи, и допишите steadrun run перед командой:

0 3 * * * /usr/local/bin/steadrun run ВАШ-UUID -- /home/deploy/backup.sh

Всё, что стоит после --, — команда с её аргументами. Пайпы и && внутри команды оберните в sh -c:

0 3 * * * /usr/local/bin/steadrun run ВАШ-UUID -- sh -c 'pg_dump mydb | gzip > /backup/db.sql.gz'

Иначе пайп разберёт shell, и steadrun будет следить только за pg_dump mydb.

Что происходит при запуске

  1. До старта команды уходит /start. Steadrun отметит, что задача началась, и посчитает время её работы.
  2. Команда работает как обычно. Её вывод идёт туда же, куда шёл: в терминал, в лог или в письмо от cron.
  3. Если код выхода 0, уходит обычный пинг. Если любой другой, уходит /fail с текстом Exit code: N и последними 8 КБ вывода.
  4. steadrun завершается с тем же кодом выхода, что и команда.

Если команду остановили сигналом (kill, остановка контейнера), это тоже падение. steadrun передаёт команде SIGINT и SIGTERM, поэтому она успевает завершиться сама.

Каждый запрос к Steadrun ждёт не дольше 5 секунд. Если Steadrun недоступен или UUID указан с ошибкой, в stderr появится одна строка вида steadrun: ping/start: HTTP 404, а команда отработает как обычно.

Docker и Kubernetes

Положите бинарник в образ:

ADD https://github.com/Steadrun-App/steadrun-cli/releases/latest/download/steadrun-linux-amd64 /usr/local/bin/steadrun
RUN chmod +x /usr/local/bin/steadrun

И запускайте задачу через него. Пример для Kubernetes CronJob:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: backup
spec:
  schedule: "0 3 * * *"
  timeZone: "Europe/Moscow"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: backup
              image: registry.example.com/backup:latest
              command: ["steadrun", "run", "ВАШ-UUID", "--", "/app/backup.sh"]

steadrun работает как PID 1 и передаёт команде SIGTERM, когда Kubernetes останавливает под. Если под так и не запустился, например образ не скачался, пинга не будет совсем, и Steadrun пришлёт алерт, когда истечёт grace-период.

Что уходит в Steadrun

При падении в Steadrun уходят код выхода и последние 8 КБ вывода. Они сохраняются в истории проверки и приходят в алертах на почту, в Telegram и на вебхук. Не оборачивайте команды, которые могут напечатать пароли, токены или данные пользователей. Для таких задач подойдёт обычный пинг через curl из рецептов.

Переменные окружения

Одна: STEADRUN_BASE_URL, адрес Steadrun. По умолчанию https://steadrun.ru.

Что дальше