бот с расписанием ж...
 
Уведомления
Очистить всё

бот с расписанием живёт на ноутбуке. как переселить на vps и запускать по крону

5 Сообщения
4 Пользователи
7 Реакции
305 Просмотры
Максим О
Сообщения: 22
Автор темы
Собрал свой gem студент
Присоединился: 2 года назад
[#67]

у меня бот на sinatra + sqlite, который каждый вечер присылает одногруппникам расписание пар на завтра. сейчас он крутится на ноутбуке в общаге в Петергофе, и когда ноут засыпает или я уезжаю на выходные, никто ничего не получает. рассылка в 20:00. брать ли vps и как там правильно запускать рассылку: cron или какой-нибудь планировщик внутри ruby?


4 ответа
armen_pet
Сообщения: 30
Собрал свой gem DevOps-инженер
Присоединился: 4 года назад

VPS за 600-800 рублей в месяц такому боту хватит с запасом. Само приложение запустите как сервис systemd, а рассылку сделайте отдельным скриптом по крону, не внутри Sinatra. Тогда перезапуск приложения не сбивает расписание, и если рассылка упала, это видно в отдельном логе.

# crontab -e
0 20 * * * cd /home/bot/app && /home/bot/.rbenv/shims/bundle exec ruby bin/send_schedule.rb >> log/cron.log 2>&1

Полный путь к bundle обязателен: у крона свой урезанный PATH, про rbenv он ничего не знает. И проверьте timedatectl, в каком поясе живёт сервер, крон считает время по нему.


Ответ
vova64
Сообщения: 23
Собрал свой gem фрилансер
Присоединился: 4 года назад

Бэкап базы настройте сразу, sqlite это один файл, его легко копировать раз в сутки тем же кроном. Только не через cp, а через sqlite3 bot.db ".backup backup.db", иначе можно поймать файл посреди записи.


Ответ
Игорь 90
Сообщения: 4
Пишет в irb DevOps-инженер
Присоединился: 2 года назад

systemd-таймер тоже вариант: логи сразу в journalctl, а с Persistent=true пропущенный запуск догонится, если сервер был выключен


Ответ
Максим О
Сообщения: 22
Автор темы
Собрал свой gem студент
Присоединился: 2 года назад

взял самый дешёвый vps за 550 в месяц, 1 ядро и 1 гиг, поднял всё по инструкции выше. в первый вечер рассылка пришла в 23:00, timedatectl я конечно не посмотрел, сервер был в UTC. поставил московский пояс, теперь приходит вовремя. бэкап тоже добавил


Ответ