Как настроить cron-задачу — чтобы скрипт запускался сам, по расписанию

У тебя есть скрипт: делает бэкап, шлёт отчёт, чистит папку. Проблема одна — его надо запускать руками. Каждый день. В одно и то же время. Скучно и легко забыть.
cron — это встроенный будильник системы. Ты один раз описываешь «что и когда запустить», и дальше оно срабатывает само, пока ты занят другим. Разберём по шагам, как завести такую задачу и не споткнуться на типичных граблях.
Шаг 1. Открой расписание
На Linux и macOS у каждого пользователя есть свой список cron-задач — crontab. Открывается командой:
crontab -e
Первый раз система спросит, каким редактором править (проще всего выбрать nano — он подписывает горячие клавиши внизу). Откроется файл, куда каждую задачу пишут одной строкой.
Шаг 2. Разбери синтаксис из пяти полей
Строка задачи выглядит так: пять полей времени, потом команда. Пять полей — это, слева направо:
минута час день-месяца месяц день-недели
Звёздочка * значит «любое значение». Примеры расписаний:
0 9 * * *— каждый день в 9:00 утра.*/15 * * * *— каждые 15 минут.0 3 * * 1— в 3:00 ночи по понедельникам (день недели: 0 или 7 — воскресенье, 1 — понедельник).30 23 1 * *— в 23:30 первого числа каждого месяца.
Читается «справа как редко, слева как часто»: крайнее левое поле — минуты, крайнее правое — дни недели. Если путаешься — открой генератор crontab, введи «каждый день в 9» и подсмотри строку.
Шаг 3. Впиши задачу с полными путями и логом
Вот рабочая строка целиком:
0 9 * * * /usr/bin/python3 /home/me/backup.py >> /home/me/cron.log 2>&1
Разберём хвост — он важен:
- Полные пути ко всему. Не
python3, а/usr/bin/python3. Неbackup.py, а полный путь к файлу. cron запускается в «голом» окружении и почти ничего не знает о твоих привычных путях — об этом ниже. >> /home/me/cron.log— дописывать весь вывод скрипта в файл-лог.2>&1— отправить туда же и ошибки (не только обычный вывод). Без этого хвоста ошибки просто пропадут, и ты не поймёшь, почему задача «молчит».
Сохрани файл и выйди (в nano — Ctrl+O, Enter, потом Ctrl+X). cron подхватит изменения сам.
Шаг 4. Проверь, что задача записалась
Посмотри текущий список задач:
crontab -l
Твоя строка должна быть на месте. И отдельно — сначала запусти скрипт руками, ровно той командой, что стоит после полей времени:
/usr/bin/python3 /home/me/backup.py
Если руками он падает — cron тут ни при чём, чини сам скрипт. Проверять расписание есть смысл только на скрипте, который уже работает.
Что получится
Дальше система сама вызывает твою команду в назначенное время — хоть в 3 ночи, хоть каждые 10 минут. Ты про неё забываешь, а она делает своё дело. Заглянул в cron.log — видно, отработала ли, и что вывела.
Захочешь убрать одну задачу — снова crontab -e и сотри её строку. А вот команды crontab -r остерегайся: она без вопросов стирает весь список задач разом, не только последнюю. Легко нажать вместо -e и потерять все расписания.
Две грабли, на которые все наступают:
- cron не видит твоё окружение. Он запускается без твоего
PATHи без активированного виртуального окружения Python. Отсюда «руками работает, из cron — нет». Лекарство — абсолютные пути ко всему и запуск python прямо из venv (/home/me/venv/bin/python). Если задача молчит — начни именно отсюда. - Компьютер должен быть включён. cron на ноутбуке не сработает, пока ноутбук спит или выключен. Для задач, что должны идти круглосуточно, cron ставят на сервере, который всегда онлайн.
Частые вопросы
Как проверить cron-задачу, не дожидаясь нужного времени?
Не жди 9 утра — временно поставь расписание * * * * * (каждую минуту) и смотри в лог, появляется ли запись. Убедился, что отрабатывает, — верни нормальное расписание. Так проверка занимает минуту, а не сутки.
Что означает */5 в поле cron?
Косая черта — это шаг. */5 в поле минут значит «каждые 5 минут»: 0, 5, 10, 15 и так далее. Аналогично */2 в поле часов — каждые два часа. Удобно, когда нужно «регулярно», а не «в конкретный момент».
cron есть на Windows?
Классического cron на Windows нет — там своя штука, «Планировщик заданий» (Task Scheduler), с той же идеей «запусти это по расписанию», но через окошки, а не строку crontab. А вот на сервере (почти всегда Linux) и на macOS cron работает именно так, как описано выше.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





