Сообщество / Боты

Обсуждение — VPS для бота ВКонтакте: деплой и работа 24/7

Источник:
VPS для бота ВКонтакте: vk_api, Long Poll и systemd 24/7

Бот для сообщества ВКонтакте отвечает подписчикам, принимает заявки и рассылает уведомления. Чтобы он работал без выходных, его размещают на VPS. Развернём бота на vkbottle или vk_api с Bots Long Poll и автозапуском через systemd. Бот ВК работает от имени сообщества через Bots Long Poll API: он держит открытое соединение с серверами ВКонтакте и получает события — новые сообщения, вступления, реакции. В отличие от Callback API, Long Poll не требует внешнего домена и белого IP, что упрощает запуск на любом VPS.

Подробнее →
kirill_nsk
Middle
Сообщения: 184
Репутация: 129
Дата регистрации:
26.08.2026
АВТОР ТЕМЫ02 нояб. 2026 г., 12:01 (GMT+3)
знакомая держит маленькую мастерскую по ремонту велосипедов, и у неё группа вк, где одни и те же вопросы по кругу: «сколько стоит переборка втулки», «вы в субботу работаете?». прикидываю бота с кнопками. фронт у меня в голове уже нарисован, а вот серверная часть пока только по статье.

зацепился за одно место в разделе про systemd:

Restart=always
RestartSec=5


и там же ниже, в частых ошибках, пункт про токен без прав на сообщения.

вот как я это понимаю, поправьте, если не туда полез. если бот падает не из-за случайной ошибки в обработчике, а сразу на старте (токен кривой, прав нет, опечатка в bot.env), то systemd будет честно поднимать его каждые пять секунд. бесконечно, или пока я не загляну в journalctl. снаружи это выглядит как «бот молчит», а в status, может быть, вообще мелькает active, если я попаду между перезапусками.

вопрос такой: как такое ловят по-нормальному? ставят ограничение на число перезапусков, чтобы сервис в итоге честно ушёл в failed? или проверяют токен отдельным шагом до bot.run_forever(), чтобы скрипт сразу внятно падал с понятной строкой в логе?

мне второе ближе по-фронтендерски: сначала валидация, потом запуск. но не знаю, принято ли так у ботов или я усложняю.
0
V
vlad_dv
Junior
Сообщения: 14
Репутация: 11
Дата регистрации:
26.09.2026
02 нояб. 2026 г., 14:03 (GMT+3)
Ты всё правильно понял, и там есть ещё один подвох. По умолчанию у systemd лимит пять запусков за десять секунд. С RestartSec=5 в это окно больше двух попыток не влезет, поэтому лимит не сработает никогда, и сервис будет крутиться бесконечно.

Я бы делал оба варианта, они не спорят:

[Unit]
StartLimitIntervalSec=300
StartLimitBurst=5

[Service]
Restart=always
RestartSec=5
RestartPreventExitStatus=78


В скрипте до run_forever делаешь один лёгкий запрос к API от имени группы. Если токен не прошёл, печатаешь понятную строку и выходишь с кодом 78. Это код «ошибка конфигурации» из sysexits. systemd его увидит, перезапускать не станет, и status честно покажет failed вместе с твоей строкой. А случайные падения в обработчике пусть дальше ловит Restart. Лимит в [Unit] страхует от того, что ты не предусмотрел.

И раз у тебя вопрос «вы в субботу работаете?», загляни в timedatectl на сервере. Я во Владивостоке, у меня UTC+10, и сколько раз видел ботов, которые жили по UTC или по часовому поясу дата-центра. Человек пишет в субботу в девять утра, а бот по своему времени отвечает «сейчас закрыто, приходите завтра». Лучше хранить часы мастерской с явной зоной в конфиге и не полагаться на системное время машины.
0