11. Автоматизация и планировщик задач

Автоматизация и планировщик задач

Описание: В этом уроке мы научимся запускать Python-скрипты автоматически — по расписанию. Это основа автоматизации: от напоминаний и резервного копирования до сбора данных и рассылок.

1. Зачем нужна автоматизация

Python отлично подходит для выполнения повторяющихся задач:
  • Отправка отчётов или e-mail каждый день.
  • Резервное копирование данных по расписанию.
  • Проверка API или обновление сайта каждые N минут.
  • Мониторинг логов и автоматические уведомления.

2. Планировщик внутри Python — библиотека schedule

Библиотека schedule позволяет выполнять действия с заданным интервалом без внешних инструментов.
Установите библиотеку один раз с помощью pip:

pip install schedule

3. Пример простого планировщика

Создадим скрипт, который выводит напоминание каждый час.

import schedule
import time

def remind(): print('Не забудьте сделать перерыв!')

# каждые 60 минут schedule.every(1).hours.do(remind)

print('Планировщик запущен. Нажмите Ctrl+C для выхода.')

while True: schedule.run_pending() time.sleep(1)

Каждую минуту (или час) программа проверяет, пора ли выполнить задачу, и вызывает нужную функцию.

4. Пример с несколькими задачами

Можно добавить несколько заданий:

def backup():
    print('Резервное копирование завершено.')

def check_news(): print('Проверяем новости...')

schedule.every().day.at('09:00').do(backup) schedule.every(30).minutes.do(check_news)

while True: schedule.run_pending() time.sleep(1)

Задачи можно задавать по дням недели, времени суток или интервалам.

5. Запуск скрипта в фоне

Когда ваш скрипт готов, его можно запускать:
  • Через консоль — просто python main.py.
  • В фоне с помощью nohup python script.py & (Linux).
  • Через диспетчер задач или cron — чтобы запускался автоматически.

6. Планировщик cron (Linux / macOS)

Если вы работаете на Linux или macOS — используйте cron. Это системный планировщик.

# Открыть crontab
crontab -e

# Пример: запуск каждый день в 8:00 0 8 * * * /usr/bin/python3 /home/user/backup.py

Формат cron:

  • Первая цифра — минуты (0–59).
  • Вторая — часы (0–23).
  • Далее — день, месяц и день недели.

7. Планировщик на Windows (Task Scheduler)

Если вы на Windows — используйте «Планировщик заданий»:
  • Откройте меню «Пуск» → «Планировщик заданий».
  • Создайте задачу → «Создать простую задачу».
  • Выберите интервал (ежедневно, еженедельно и т.д.).
  • Укажите путь к Python и к вашему скрипту.

Пример:


C:\\Python312\\python.exe C:\\scripts\\auto_backup.py

8. Пример реального сценария

Создадим простую автоматическую систему резервного копирования.

import schedule
import shutil
import datetime
import time

SRC = 'data/' DST = 'backup/'

def backup(): date = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M') target = f'{DST}backup_{date}' shutil.make_archive(target, 'zip', SRC) print(f'Резервная копия сохранена: {target}.zip')

schedule.every().day.at('02:00').do(backup)

while True: schedule.run_pending() time.sleep(60)

Каждый день в 2:00 утра создаётся архив папки `data/` в виде ZIP-файла с датой.

9. Советы по автоматизации

  • Добавьте логирование (через модуль logging) — чтобы сохранять отчёты о выполнении.
  • Оборачивайте задачи в try/except, чтобы программа не падала при ошибках.
  • Используйте venv — изолированное окружение для зависимостей.
  • Если нужно, добавьте уведомления (email, Telegram-бот) после выполнения задачи.

10. Мини-проект: Автоматическое напоминание

Создадим маленький бот-напоминатель на базе schedule.

import schedule
import time

reminders = [ ('08:00', 'Доброе утро! Время проверить задачи.'), ('13:00', 'Обеденный перерыв!'), ('18:00', 'Отдохните и подвигайтесь!') ]

for t, msg in reminders: schedule.every().day.at(t).do(lambda m=msg: print(m))

print('Напоминатель запущен.') while True: schedule.run_pending() time.sleep(1)

Итоги урока

Теперь вы умеете:
  • Планировать автоматические задачи с помощью schedule.
  • Запускать Python-скрипты по расписанию через cron или Task Scheduler.
  • Создавать резервные копии и напоминания автоматически.
  • Применять автоматизацию в реальных проектах.