Содержание
Написали Python-скрипт, который собирает данные раз в час, парсит сайт раз в день или отправляет уведомления раз в неделю. Локально на ноутбуке держать нельзя — спит, выключается, теряет интернет. Нужен сервер, который запускает ваш код по расписанию или поддерживает в работе. В статье — обзор вариантов: от VPS и облачных функций до бесплатных платформ для маленьких скриптов.
Содержание
- Какие задачи решаем
- Вариант 1. VPS с cron
- Вариант 2. Yandex Cloud Functions
- Вариант 3. PythonAnywhere
- Вариант 4. Railway / Render
- Вариант 5. GitHub Actions
- Сравнение всех вариантов
- Как запускать по расписанию
- Логирование и мониторинг
- Частые ошибки
- FAQ
- Чек-лист
Какие задачи решаем
- Парсинг сайтов по расписанию. Сбор цен конкурентов, отслеживание новостей.
- Уведомления. Скрипт проверяет события и шлёт сообщения в Telegram, email.
- Бэкапы. Архивирование данных и отправка в облако.
- Обработка данных. Импорт CSV, нормализация, выгрузка в БД.
- API-агрегаторы. Сбор данных из разных источников, объединение.
- Постоянно работающие скрипты. Слушают веб-хуки, обрабатывают очередь.
Вариант 1. VPS с cron
Классика. Арендуете виртуальный сервер, устанавливаете Python, настраиваете cron для запуска по расписанию.
Плюсы:
- Полный контроль.
- Любые библиотеки и зависимости.
- Один сервер на много скриптов.
- От 250 ₽/мес в РФ.
Минусы:
- Нужно знать Linux.
- Сами обновляете, мониторите.
Настройка cron:
# Открываем редактор cron
crontab -e
# Добавляем задачу: каждый час в 30 минут запускать скрипт
30 * * * * /usr/bin/python3 /home/user/scripts/myscript.py >> /home/user/logs/myscript.log 2>&1
# Каждый день в 03:00
0 3 * * * /usr/bin/python3 /home/user/scripts/backup.py
Вариант 2. Yandex Cloud Functions
Serverless-функции от Яндекса. Платите только за выполнения.
Плюсы:
- Бесплатный лимит — 1 млн вызовов в месяц.
- Не нужно администрировать сервер.
- Российская инфраструктура.
- Автомасштабирование.
Минусы:
- Сложнее на старте — нужно понять serverless-модель.
- Максимальное время выполнения функции — 10 минут.
- Холодный старт первого вызова — 1-3 секунды.
Расписание задаётся через Yandex Cloud Triggers с cron-выражением.
Вариант 3. PythonAnywhere
Специализированный хостинг для Python с веб-интерфейсом для cron-задач.
Плюсы:
- Бесплатный тариф для одного простого скрипта.
- Веб-интерфейс — задаёте задачу в UI, без crontab.
- Готовая среда — Python преднастроен.
Минусы:
- Бесплатно — одна задача раз в день, ограниченное время выполнения.
- Платно от $5/мес.
- В РФ периодически нестабильная доступность.
Вариант 4. Railway / Render
Современные PaaS-платформы. Поддерживают cron-задачи.
Особенности:
- Деплой из Git — push и работает.
- Бесплатные лимиты $5/мес кредитов на Railway.
- Готовая среда для Python.
- Иностранные сервисы, нестабильная доступность из РФ.
Вариант 5. GitHub Actions
Бесплатный CI/CD от GitHub. Можно использовать для cron-задач.
Плюсы:
- Бесплатно для публичных репозиториев (2000 минут в месяц для приватных).
- Никакой инфраструктуры.
- Готовые actions для популярных задач.
Минусы:
- Минимальный интервал — 5 минут (фактически — 10-15).
- Нет постоянного хранения файлов — каждый запуск с чистого листа.
- В РФ доступность нестабильная.
Пример workflow:
# .github/workflows/cron.yml
name: Run script daily
on:
schedule:
- cron: '0 3 * * *' # Каждый день в 03:00 UTC
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: python script.py
Сравнение всех вариантов
| Вариант | Цена | Сложность | Долгие задачи | Постоянное хранение |
|---|---|---|---|---|
| VPS (РФ) | от 250 ₽/мес | Средняя | Да, без лимитов | Да |
| Yandex Cloud Functions | Бесплатно до 1 млн вызовов | Средняя | До 10 мин | Нет (нужен Storage) |
| PythonAnywhere | $0-5/мес | Низкая | До часа на платном | Да |
| Railway / Render | ~$5 free / от $7/мес | Низкая | Да | Да (на платных) |
| GitHub Actions | Бесплатно | Низкая | До 6 часов | Нет |
Как запускать по расписанию
Cron — синтаксис
* * * * * команда
│ │ │ │ │
│ │ │ │ └─ день недели (0-6, 0 = воскресенье)
│ │ │ └─── месяц (1-12)
│ │ └───── день месяца (1-31)
│ └─────── час (0-23)
└───────── минута (0-59)
Примеры:
0 * * * *— каждый час в :00.*/15 * * * *— каждые 15 минут.0 3 * * *— ежедневно в 03:00.0 0 * * 1— каждый понедельник в полночь.
Удобный конструктор: crontab.guru.
Логирование и мониторинг
Сcript молча работает — не знаете, упал он или нет. Обязательно:
- Логирование. Записывайте в файл что и когда сделал скрипт.
- Уведомления об ошибках. При исключении — шлите в Telegram.
- Healthchecks.io. Скрипт шлёт «я живой» сигнал, сервис уведомляет если не пришёл вовремя.
- UptimeRobot. Для веб-эндпоинтов.
Простой Telegram-алерт на ошибку:
import traceback
import requests
try:
# ваш код
do_work()
except Exception as e:
requests.post(
f'https://api.telegram.org/bot{TOKEN}/sendMessage',
json={'chat_id': CHAT_ID, 'text': f'⚠️ Ошибка: {e}\n\n{traceback.format_exc()}'}
)
Частые ошибки
- Запуск на виртуальном веб-хостинге. Веб-хостинг не для cron-задач, ограничения по времени и ресурсам.
- Отсутствие виртуального окружения. Зависимости конфликтуют. Используйте venv.
- Жёсткие пути в коде. /home/user/data.csv на одном сервере — не работает на другом. Используйте относительные пути.
- Не настроены логи. Скрипт упал — никто не знает. Логи + уведомления обязательны.
- Хранение токенов в коде. Утечка через Git — взлом сервисов. Используйте переменные окружения.
- Игнорирование часовых поясов. Cron на сервере работает в UTC, вы думаете — в Москве. Сверяйте.
- Запуск тяжёлых скриптов на минимальном VPS. Парсинг с памятью 256 МБ — OOM. Берите минимум 1 ГБ.
FAQ
На некоторых — да, через cron в панели управления. Но с серьёзными ограничениями: лимит времени работы, нагрузки. Для разовых лёгких задач подходит, для серьёзных скриптов — VPS.
Минимум 1 vCPU / 1 ГБ RAM / 20 ГБ SSD. Это базовый тариф от 300 ₽/мес. Если парсер тяжёлый или с базой — 2 ГБ RAM.
В пределах бесплатного лимита (1 млн вызовов и 10 ГБ × часов памяти в месяц) — да. Для большинства скриптов с запуском раз в час этого хватает с запасом.
Разбейте на части (батчи). Или используйте VPS, где нет лимита на время. Или Yandex Cloud Compute (не serverless, а полноценная виртуальная машина).
Через git pull — храните скрипт в репозитории, на сервере подтягиваете изменения. Или через rsync с локальной машины. Не через FTP — медленно и подвержено ошибкам.
Для постоянной работы или большого набора скриптов — VPS. Для редких эпизодических задач — Cloud Functions выгоднее.
Да, есть лимит 2000 минут в месяц для приватных репозиториев. Хватает для большинства лёгких задач.
Чек-лист настройки
- ☐ Выбран хостинг под задачу (VPS, Functions, Actions)
- ☐ Скрипт упакован в проект с requirements.txt
- ☐ Зависимости установлены в виртуальном окружении
- ☐ Секреты хранятся в env-переменных
- ☐ Настроено расписание (cron, trigger)
- ☐ Логи пишутся в файл или централизованную систему
- ☐ Настроены уведомления об ошибках
- ☐ Healthcheck подтверждает работоспособность
- ☐ Часовой пояс правильный
- ☐ Сделан тестовый запуск
- ☐ Подтверждено выполнение по расписанию
Заключение
Для одного-двух простых скриптов оптимальны Yandex Cloud Functions (бесплатно) или PythonAnywhere ($5/мес). Для постоянной работы и многих скриптов — VPS от 250-500 ₽/мес. Для разовых задач — GitHub Actions.
Подобрать VPS под Python-задачи можно через подборщик хостингов Zettabyte с фильтрами по RAM, ОС и локации. А если параллельно нужен сайт для проекта — посмотрите HTML-шаблоны.