Если ты хоть раз ловил себя на мысли «блин, опять руками запускать этот скрипт», то ты уже готов к знакомству с cron. Это встроенный планировщик задач в Linux, который позволяет автоматизировать рутину: бэкапы, очистку логов, обновления и вообще всё, что можно запихнуть в консольную команду. В Ubuntu cron и crontab — это must-have инструменты для любого, кто не хочет тратить жизнь на повторяющиеся задачи.
Возможности cron и crontab
- Запускать скрипты и команды по расписанию (минуты, часы, дни недели, месяцы — любой гибрид).
- Автоматизация резервного копирования, обновления, мониторинга и любых кастомных задач.
- Работа как для отдельных пользователей, так и для системных задач (root).
- Логи запусков и ошибок — удобно дебажить.
Что потребуется
- Любая современная Ubuntu (16.04, 18.04, 20.04, 22.04 — всё ок).
- Доступ в терминал (ssh или локально).
- Права пользователя, для системных задач —
sudo
. - Железо не критично — cron работает даже на Raspberry Pi.
Установка cron в Ubuntu: пошагово
- Проверь, установлен ли cron:
dpkg -l | grep cron
Если ничего не выводит, значит надо ставить.
- Установка cron:
sudo apt update sudo apt install cron
Обычно cron уже есть в Ubuntu «из коробки», но вдруг…
- Запусти и добавь в автозагрузку:
sudo systemctl enable --now cron
Проверить статус:
systemctl status cron
- Проверь, что cron реально работает:
ps aux | grep cron
Должна быть строка вроде
/usr/sbin/cron
. - Готово! Теперь можно работать с crontab.
Использование crontab: команды и варианты
- Открыть crontab текущего пользователя:
crontab -e
Откроется редактор (обычно nano или vim).
- Посмотреть текущие задания:
crontab -l
- Удалить все задания:
crontab -r
Осторожно! Безвозвратно.
- Редактировать crontab для другого пользователя (только root):
sudo crontab -u username -e
- Системный crontab:
sudo nano /etc/crontab
Здесь можно явно указывать пользователя для каждой задачи.
Синтаксис строки задания:
* * * * * команда
Пять звёздочек — это минуты, часы, день месяца, месяц, день недели. Примеры:
0 3 * * * /home/user/backup.sh
— каждый день в 03:00*/10 * * * * /usr/bin/cleanup.sh
— каждые 10 минут15 14 1 * * /home/user/report.sh
— 1 числа каждого месяца в 14:15
Подробнее о синтаксисе: man crontab
Переменные окружения
В crontab по умолчанию минимальное окружение. Если нужен PATH
или что-то ещё — пропиши явно в начале файла:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Логи cron
Логи ошибок и вывода команд можно отправить на почту или в файл:
0 4 * * * /home/user/script.sh >> /var/log/myscript.log 2>&1
Ошибки и как делать не надо
- Не указываешь полный путь до скриптов и бинарей — cron не знает твой
~/.bashrc
иPATH
. - Скрипт работает вручную, но не через cron — почти всегда это переменные окружения или отсутствие прав на исполнение.
- Забыл про
chmod +x
у скрипта. - Пихаешь интерактивные команды (типа
read
) — cron не умеет общаться с пользователем. - Не логируешь вывод — потом не найдёшь, почему не сработало.
- Ставишь
crontab -e
под root, чтобы сделать задачу для пользователя — лучше использоватьsudo crontab -u username -e
или/etc/crontab
.
Реальный пример использования
Допустим, ты хочешь делать бэкап базы данных каждый день в 2:30 ночи и складывать архив в отдельную папку.
- Пишешь скрипт
/home/user/backup_db.sh
:#!/bin/bash DATE=$(date +%F) mysqldump -u root -pYourPass dbname | gzip > /home/user/backups/db_$DATE.sql.gz
Не забудь
chmod +x /home/user/backup_db.sh
- Добавляешь в crontab:
crontab -e
И вставляешь строку:
30 2 * * * /home/user/backup_db.sh >> /home/user/backups/backup.log 2>&1
- Всё, теперь бэкапы будут делаться сами, а если что-то пошло не так — посмотришь
backup.log
.
Заключение
Cron — это самый простой путь к автоматизации в Linux. Главное — не забывай про окружение, логи и права. Потренируйся на простых задачах, и ты быстро поймёшь, как это круто экономит время. Официальная дока: Ubuntu Cron HowTo и man crontab.
Если есть вопросы — смотри man cron
и man crontab
, ну и гугли примеры, их море на StackOverflow и Reddit.
Ваш отзыв