tg-exec — итог любой команды в Telegram
Обёртка для cron, бэкапов, деплоев и CI: код выхода, длительность и вывод команды приходят в Telegram. Прокси, свой Bot API для закрытого контура, шифрование токена.
Запустили бэкап, обновление или деплой — и узнали, чем он закончился, не заходя на сервер. 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=показывает токен только конкретной службе.
Как начать
- Создайте бота у @BotFather.
- Установите tg-exec — ссылки на пакеты и исходники доступны после входа.
- Запустите
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.
