у меня бот на sinatra + sqlite, который каждый вечер присылает одногруппникам расписание пар на завтра. сейчас он крутится на ноутбуке в общаге в Петергофе, и когда ноут засыпает или я уезжаю на выходные, никто ничего не получает. рассылка в 20:00. брать ли vps и как там правильно запускать рассылку: cron или какой-нибудь планировщик внутри ruby?
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, в каком поясе живёт сервер, крон считает время по нему.
Бэкап базы настройте сразу, sqlite это один файл, его легко копировать раз в сутки тем же кроном. Только не через cp, а через sqlite3 bot.db ".backup backup.db", иначе можно поймать файл посреди записи.
systemd-таймер тоже вариант: логи сразу в journalctl, а с Persistent=true пропущенный запуск догонится, если сервер был выключен
взял самый дешёвый vps за 550 в месяц, 1 ядро и 1 гиг, поднял всё по инструкции выше. в первый вечер рассылка пришла в 23:00, timedatectl я конечно не посмотрел, сервер был в UTC. поставил московский пояс, теперь приходит вовремя. бэкап тоже добавил