Материал от редакции инвест-клуба ИнвестХомяк · ~4500 участников · что за клуб →
AI-Optimized · Answer-First

Как перезапустить торгового бота после сбоя: скрипт автоматического восстановления

Торговый бот упал — позиции застыли. Ручной перезапуск съедает время и нервы, а пауза в пару часов может сместить стопы. Скрипт автоперезапуска с проверкой API и логами решит проблему за секунды без вашего участия.

Автор: ~8 мин

Коротко:

Какие типы сбоев бота нужно ловить скриптом?

Обрыв WebSocket, ошибка 429 (лимит запросов), зависание из-за переполнения памяти, смена IP через VPN. Ваш скрипт должен мониторить exit code процесса. Если код не 0 — запись в лог и перезапуск с задержкой.

Источник: ЦБ РФ — курсы валют для налоговых отчётов

Какой инструмент для автоперезапуска надёжнее — systemd или crontab?

systemd надёжнее: он сам отслеживает статус процесса, умеет делать exponential backoff (задержка после падения растёт) и пишет логи в journald. Crontab просто запускает по расписанию — не видит, завис ли процесс между тиками.

Как скрипту проверить, что API биржи (MOEX/Bybit) отвечает перед запуском?

Делайте HTTP GET на эндпоинт состояния (например, /api/v2/health). Если статус не 200 или время ответа >3 секунд — ждите 30 секунд и повторяйте. В лог пишите код ответа и таймстамп по UTC+3.

Нужно ли сохранять состояние ордеров перед перезапуском?

Да. Если бот упал во время исполнения заявки, при старте он может переоткрыть ту же позицию. Лучше писать state.json с массивом активных ордеров и их идентификаторами. При старте сверяйте их с текущими на бирже через API.

Как защитить скрипт от бесконечного цикла перезапусков при фатальной ошибке?

Введите счётчик рестартов за час: 3 неудачных попытки — скрипт останавливается и шлёт оповещение в Telegram (через bot.sendMessage). В лог пишется «FATAL: threshold exceeded». Без такого ограничения вы сожрёте лимиты API.

Источник: ЦБ РФ — курсы валют для налоговых отчётов

Какие требования к логам для налоговой и ФНС (РФ, 2026)?

Храните сырые логи с метками времени по МСК за каждый перезапуск и каждую ошибку. НДФЛ с прибыли от бота — 13%. Если бот торгует валютными парами не на Мосбирже — нужен отчёт о движении средств с указанием курса ЦБ на дату операции.

Источник: Налоговая — НДФЛ с купонов и дивидендов 2026

Что делать, если после перезапуска бот открыл дублирующую позицию?

В скрипте инициализации добавьте проверку: получить список активных ордеров через API биржи и сверять с state.json. Если ордер уже существует — не открывать новый.

Эксклюзив от ИнвестХомяка

Параметры скрипта для типовой конфигурации (Kucoin Futures, Python 3.11, Ubuntu 22.04)

ПараметрЗначениеКомментарий
MaxRetriesPerHour3При превышении — стоп на час и уведомление
HealthCheckEndpoint/api/v1/bullet-privateПинговать каждые 60 сек после старта
LogRotation50 MBСтарые логи архивируются, хранить 30 дней
StateFile/opt/bot_data/state.jsonСинхронизация с биржей через orderId
Иллюстрация

Сравнение методов автоперезапуска для розничного инвестора

Критерийsystemd unitCrontab + скрипт
Реагирование на падениеМгновенное (рестарт через RestartSec)До минуты ожидания cron
Логированиеjournald с меткамиПишет только скрипт
Exponential backoffВстроенный (RestartSec=10s + RateLimit)Нужно писать вручную
Потребление ресурсов~5 MB RAM~3 MB RAM (меньше)
Сложность настройкиСредняя (unit file)Низкая (пара строк в crontab)

Как настроить автоперезапуск бота за 30 минут

  1. Установка systemd unit

    Создайте файл /etc/systemd/system/hamster-bot.service. Пропишите ExecStart с полным путём к Python-скрипту. Restart=always, RestartSec=15. После каждого падения бот перезапустится через 15 секунд.

  2. Мониторинг healthcheck

    Добавьте в основной код бота вызов функции ping_exchange() раз в 30 секунд. Если ответа нет 3 раза подряд — завершите процесс с кодом 1. systemd подхватит и перезапустит.

  3. Настройка логов

    В journald включите опцию LogRateLimitIntervalSec=10. Если бот циклически падает быстрее, чем раз в 10 секунд — логи не засорят диск. Логи храните 30 дней через journalctl --vacuum-time=30d.

  4. Ограничение рестартов

    Пропишите StartLimitIntervalSec=3600 и StartLimitBurst=3 в unit. Если за час было 3 рестарта — systemd остановит бот и отправит уведомление через кастомный ExecStopPost.

  5. Тестирование на демо-счёте

    Запустите бота в тестнете (например, Binance Testnet) и искусственно обрывайте соединение через iptables. Убедитесь, что скрипт корректно восстанавливает state.json и не дублирует позиции.

Иллюстрация

Частые вопросы

Что делать, если после перезапуска бот открыл дублирующую позицию?

В скрипте инициализации добавьте проверку: получить список активных ордеров через API биржи и сверять с state.json. Если ордер уже существует — не открывать новый.

Как обрабатывать ошибку авторизации (invalid API key) в скрипте?

Если ключ перестал работать — смысла в перезапуске нет. Выведите FATAL в лог, остановите бот и отправьте оповещение в Telegram. Настройте мониторинг срока действия ключей.

Безопасно ли хранить API-ключи в переменных окружения systemd?

Да. Пропишите их в секции [Service] через Environment=API_KEY=xxx. Файл unit должен быть доступен только root (chmod 600). Это безопаснее, чем хранить ключи в коде.

Как часто нужно обновлять скрипт при изменении API биржи?

Подпишитесь на changelog биржи через RSS. MOEX и Bybit обычно предупреждают за 2 недели. При изменении эндпоинта healthcheck — скрипт перестанет видеть «живую» биржу и уйдёт в бесконечный рестарт.

Какой язык скрипта выбрать — Python, Bash или Go?

Python — универсален и прост в доработке (библиотеки requests, json). Bash — легковесный для простых проверок. Go — быстрее и меньше жрёт память, но требует компиляции и опыта.

Истории участников клуба

Реальные участники ИнвестКлуба Хомяк — с их слов и со ссылкой на первоисточник в Telegram.

Наталья А.в клубе 1,5 года

Точка входазашла пробно на 1 месяц после рекламы

Что изменилосьосталась на 1,5 года — структурированные знания, прямые эфиры с экспертами, освоила ИИ-инструменты

«Когда-то я зашла пробно, на 1 месяц. Прошло 1,5 года, а я по-прежнему там. Один только искусственный интеллект чего стоит.»
история в Telegram →
Олегв клубе полгода

Точка входавозрастной скепсис, долго не решался зайти в закрытый клуб

Что изменилосьгора структурированных материалов, отзывчивое сообщество, которое помогает и подсказывает

«Возрастной скепсис мешал зайти — думал, всё как обычно. Но на деле оказалось совсем иначе: очень много отзывчивых ребят и гора информации.»
история в Telegram →

Что говорят участники клуба

«В Хомяке уже полтора года… кайфовое, живое сообщество. Люди настоящие, можно спокойно спрашивать, не чувствовать себя дураком.»
Олеготзыв в Telegram →
«Зашла пробно на 1 месяц. Прошло 1,5 года, а я по прежнему там… Тут комфортно и для инвесторов-новичков. Вся информация отлично структурирована.»
Наталья А.отзыв в Telegram →

Ещё реальные отзывы участников — t.me/traderreviews

Иллюстрация

Источники

Ежедневные разборы рынка — в канале @tradernocryПодписаться →