Перейти к содержимому
RunStack
АвтоматизацияИнструменты· Обновлено 16 окт. 2026 г.

tg-exec — итог любой команды в Telegram

Обёртка для cron, бэкапов, деплоев и CI: код выхода, длительность и вывод команды приходят в Telegram. Прокси, свой Bot API для закрытого контура, шифрование токена.

UbuntuUbuntuDebianDebianCentOSCentOSAlmaLinuxAlmaLinuxRocky LinuxRocky LinuxDockerDocker
Ubuntu 20.04+ · Debian 11+ · RHEL / Alma / Rocky 8+ · Alpine 3.x · macOS 12+
20

Запустили бэкап, обновление или деплой — и узнали, чем он закончился, не заходя на сервер. tg-exec выполняет команду, показывает её вывод в терминале как обычно, а по завершении присылает в Telegram короткий отчёт.

❌ Ошибка · код 2 · backup-db01
  pg_dump app | gzip > /backup/app.sql.gz
🕒 2026-10-16 03:00:00 → 03:02:03 MSK · 2 мин 3 с
💬 Вывод:
  pg_dump: error: connection to server on socket "/run/postgresql/.s.PGSQL.5432" failed

Что умеет

  • Код выхода пробрасывается как есть. Обёртка не ломает cron, systemd и CI: tg-exec -- backup.sh вернёт ровно тот код, что вернул backup.sh. Сигнал — 128+N, таймаут — 124.
  • Задача важнее уведомления. Если токен не задан или Telegram недоступен, команда всё равно выполнится, а проблема уйдёт в stderr.
  • Вывод без мусора. В сообщение попадает хвост вывода без ANSI-цветов и «прыгающих» прогресс-баров. Не влез — полный лог приходит файлом (до 45 МБ).
  • Аргументы не теряются. tg-exec -- rsync -a "/src dir/" host:/dst выполняется напрямую, без повторного разбора shell. Одна строка в кавычках идёт через bash -c — пайпы и && работают.
  • Только ошибки, если нужно. --on-failure — писать только при сбое, --silent — успех без звука, --timeout 2h — остановить зависшую задачу.
  • Группы, каналы, темы форумов. Мастер --setup сам находит chat_id по последним сообщениям боту.

Закрытый контур

tg-exec не обращается ни к каким сервисам, кроме Telegram Bot API, и не требует RunStack для работы.

  • Прокси http://, https://, socks5://, socks5h:// с логином и паролем.
  • Свой адрес API — собственный telegram-bot-api или nginx-шлюз, плюс свой CA для внутреннего сертификата.
  • Один статический бинарник без зависимостей: Linux amd64 / arm64 / armv7 / 386 и macOS. Пакеты deb, rpm, apk.

Токен под защитой

Честно: если программа читает токен без пароля — а в cron иначе нельзя, — его прочитает и тот, кто получил права этой учётки. Поэтому tg-exec закрывает то, что реально закрыть:

  • конфиг с токеном создаётся с правами 0600, а более открытый вызывает предупреждение;
  • sudo tg-exec --seal шифрует токен через systemd-creds — ключом сервера и TPM2, если он есть. Скопированный диск или бэкап без этого сервера бесполезен;
  • TOKEN_CMD работает как credential_process в aws-cli: токен отдаёт Vault, pass или любой другой менеджер секретов;
  • systemd LoadCredentialEncrypted= показывает токен только конкретной службе.

Как начать

  1. Создайте бота у @BotFather.
  2. Установите tg-exec — ссылки на пакеты и исходники доступны после входа.
  3. Запустите sudo tg-exec --setup: проверка токена → выбор чата → тестовое сообщение.
tg-exec -- apt-get -y upgrade
tg-exec --on-failure -n nightly-backup -t 3h -- /usr/local/bin/backup.sh
tg-exec "pg_dump app | gzip > /backup/app.sql.gz"

Все параметры — в man tg-exec и в tg-exec --help. Текущие настройки и проверка доставки — tg-exec --check.

Материалы доступны после входа и подтверждения email.