Содержание
  1. Содержание
  2. Какие задачи решаем
  3. Вариант 1. VPS с cron
  4. Вариант 2. Yandex Cloud Functions
  5. Вариант 3. PythonAnywhere
  6. Вариант 4. Railway / Render
  7. Вариант 5. GitHub Actions
  8. Сравнение всех вариантов
  9. Как запускать по расписанию
  10. Логирование и мониторинг
  11. Частые ошибки
  12. FAQ
  13. Чек-лист настройки
  14. Заключение

Написали Python-скрипт, который собирает данные раз в час, парсит сайт раз в день или отправляет уведомления раз в неделю. Локально на ноутбуке держать нельзя — спит, выключается, теряет интернет. Нужен сервер, который запускает ваш код по расписанию или поддерживает в работе. В статье — обзор вариантов: от VPS и облачных функций до бесплатных платформ для маленьких скриптов.

Содержание

  1. Какие задачи решаем
  2. Вариант 1. VPS с cron
  3. Вариант 2. Yandex Cloud Functions
  4. Вариант 3. PythonAnywhere
  5. Вариант 4. Railway / Render
  6. Вариант 5. GitHub Actions
  7. Сравнение всех вариантов
  8. Как запускать по расписанию
  9. Логирование и мониторинг
  10. Частые ошибки
  11. FAQ
  12. Чек-лист

Какие задачи решаем

  • Парсинг сайтов по расписанию. Сбор цен конкурентов, отслеживание новостей.
  • Уведомления. Скрипт проверяет события и шлёт сообщения в 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()}'}
    )

Частые ошибки

  1. Запуск на виртуальном веб-хостинге. Веб-хостинг не для cron-задач, ограничения по времени и ресурсам.
  2. Отсутствие виртуального окружения. Зависимости конфликтуют. Используйте venv.
  3. Жёсткие пути в коде. /home/user/data.csv на одном сервере — не работает на другом. Используйте относительные пути.
  4. Не настроены логи. Скрипт упал — никто не знает. Логи + уведомления обязательны.
  5. Хранение токенов в коде. Утечка через Git — взлом сервисов. Используйте переменные окружения.
  6. Игнорирование часовых поясов. Cron на сервере работает в UTC, вы думаете — в Москве. Сверяйте.
  7. Запуск тяжёлых скриптов на минимальном VPS. Парсинг с памятью 256 МБ — OOM. Берите минимум 1 ГБ.

FAQ

Можно ли запустить скрипт на виртуальном веб-хостинге?

На некоторых — да, через cron в панели управления. Но с серьёзными ограничениями: лимит времени работы, нагрузки. Для разовых лёгких задач подходит, для серьёзных скриптов — VPS.

Какой VPS взять для парсера?

Минимум 1 vCPU / 1 ГБ RAM / 20 ГБ SSD. Это базовый тариф от 300 ₽/мес. Если парсер тяжёлый или с базой — 2 ГБ RAM.

Yandex Cloud Functions реально бесплатно?

В пределах бесплатного лимита (1 млн вызовов и 10 ГБ × часов памяти в месяц) — да. Для большинства скриптов с запуском раз в час этого хватает с запасом.

Что делать, если скрипт работает 30 минут — не успевает в Yandex Functions?

Разбейте на части (батчи). Или используйте VPS, где нет лимита на время. Или Yandex Cloud Compute (не serverless, а полноценная виртуальная машина).

Как обновлять скрипт на VPS?

Через git pull — храните скрипт в репозитории, на сервере подтягиваете изменения. Или через rsync с локальной машины. Не через FTP — медленно и подвержено ошибкам.

Что лучше — VPS или Cloud Functions?

Для постоянной работы или большого набора скриптов — VPS. Для редких эпизодических задач — Cloud Functions выгоднее.

Можно ли использовать GitHub Actions для приватных задач?

Да, есть лимит 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-шаблоны.