Cron в Linux: автоматизация задач с примерами использования
Практически на каждом Linux-сервере регулярно выполняются десятки автоматических задач: создание резервных копий, очистка временных файлов, отправка email, обновление сертификатов SSL, запуск очередей, выполнение команд Laravel и многое другое.
За выполнение подобных задач отвечает Cron — встроенный планировщик Linux, который позволяет запускать команды и скрипты по расписанию.
В этой статье разберем, что такое Cron, как его настроить, научимся читать cron-выражения и рассмотрим множество практических примеров.
Что такое Cron
Cron — это системная служба Linux, предназначенная для автоматического запуска команд и программ по расписанию.
С помощью Cron можно:
запускать резервное копирование;
очищать кэш;
выполнять команды Laravel;
запускать PHP-скрипты;
обновлять SSL-сертификаты;
выполнять синхронизацию данных;
удалять временные файлы;
отправлять уведомления;
выполнять любые Bash-скрипты.
Практически каждый сервер использует Cron ежедневно.
Как работает Cron
Cron постоянно работает в фоновом режиме и каждую минуту проверяет расписание задач.
Если время совпадает с указанным в расписании, команда автоматически выполняется.
Проверка работы Cron
На Ubuntu проверьте статус службы:
sudo systemctl status cron
Если служба не запущена:
sudo systemctl start cron
Добавить в автозагрузку:
sudo systemctl enable cron
Что такое Crontab
Каждый пользователь Linux может иметь собственное расписание задач.
Просмотреть текущие задачи:
crontab -l
Редактировать:
crontab -e
Удалить все задачи:
crontab -r
Структура cron-записи
Каждая запись состоит из пяти полей и команды.
* * * * * команда
Расшифровка:
┌──────── минута (0–59)
│ ┌────── час (0–23)
│ │ ┌──── день месяца (1–31)
│ │ │ ┌── месяц (1–12)
│ │ │ │ ┌ день недели (0–7)
│ │ │ │ │
* * * * * команда
Значения полей
Любое значение:
*
Каждые 5 минут:
*/5
Несколько значений:
1,15,30
Диапазон:
1-10
Простые примеры
Каждую минуту:
* * * * * php script.php
Каждый час:
0 * * * * php script.php
Каждый день в полночь:
0 0 * * * php script.php
Каждый день в 03:30:
30 3 * * * php script.php
Каждое воскресенье:
0 5 * * 0 php script.php
Каждые 10 минут:
*/10 * * * * php script.php
Запуск PHP-скриптов
Например:
0 * * * * /usr/bin/php /var/www/site/artisan inspire
Или:
*/15 * * * * /usr/bin/php /var/www/site/cron.php
Лучше всегда указывать полный путь к интерпретатору PHP.
Узнать его можно командой:
which php
Cron и Laravel
Laravel использует собственный планировщик задач.
Вместо десятков cron-записей обычно добавляется всего одна:
* * * * * cd /var/www/project && php artisan schedule:run >> /dev/null 2>&1
Каждую минуту Cron запускает планировщик Laravel, который сам определяет, какие задачи необходимо выполнить.
Настройка планировщика Laravel
В файле:
routes/console.php
или через классы задач можно описывать расписание.
Например:
use Illuminate\Support\Facades\Schedule;
Schedule::command('cache:clear')
->daily();
Schedule::command('queue:prune-batches')
->daily();
Schedule::command('backup:run')
->dailyAt('03:00');
Запуск резервного копирования
Каждый день в 02:00:
0 2 * * * /home/user/backup.sh
Очистка временных файлов
Каждую ночь:
0 1 * * * rm -rf /tmp/*
Важно: внимательно проверяйте путь перед использованием
rm -rf, чтобы избежать удаления важных данных.
Перезапуск службы
Например:
0 5 * * * systemctl restart nginx
Хотя автоматический перезапуск служб обычно требуется редко, такая возможность существует.
Выполнение Bash-скриптов
Создайте файл:
nano backup.sh
Содержимое:
#!/bin/bash
echo "Backup started"
mysqldump database > backup.sql
echo "Done"
Сделайте его исполняемым:
chmod +x backup.sh
Добавьте в Cron:
0 2 * * * /home/user/backup.sh
Перенаправление вывода
Если вывод не нужен:
* * * * * php script.php > /dev/null 2>&1
Если требуется сохранить журнал:
* * * * * php script.php >> /var/log/script.log 2>&1
Где хранятся задания
Для пользователя:
/var/spool/cron/crontabs/
Системный файл:
/etc/crontab
Дополнительные задания:
/etc/cron.d/
Ежедневные задачи:
/etc/cron.daily/
Еженедельные:
/etc/cron.weekly/
Ежемесячные:
/etc/cron.monthly/
Проверка журналов
На Ubuntu можно посмотреть журнал Cron:
journalctl -u cron
Следить в режиме реального времени:
journalctl -u cron -f
В некоторых дистрибутивах сообщения также могут записываться в:
/var/log/syslog
Проверить:
grep CRON /var/log/syslog
Частые ошибки
Команда не выполняется
Чаще всего причины:
указан неверный путь к PHP;
отсутствуют права на выполнение;
неправильное расписание;
команда требует переменных окружения.
Для диагностики перенаправьте вывод в лог:
* * * * * /usr/bin/php /var/www/site/script.php >> /tmp/cron.log 2>&1
Permission denied
Проверьте права:
chmod +x script.sh
Команда работает вручную, но не через Cron
Cron запускает задачи с минимальным окружением.
Используйте абсолютные пути:
/usr/bin/php
вместо:
php
Аналогично указывайте полные пути к файлам и каталогам.
Полезные команды
Просмотреть задания:
crontab -l
Редактировать:
crontab -e
Удалить все:
crontab -r
Проверить статус:
systemctl status cron
Перезапустить службу:
sudo systemctl restart cron
Полезные советы
При работе с Cron рекомендуется:
всегда использовать абсолютные пути к программам и файлам;
перенаправлять вывод команд в лог при отладке;
проверять работу скриптов вручную перед добавлением в Cron;
не запускать тяжелые задачи слишком часто;
использовать планировщик Laravel (
schedule:run) вместо множества отдельных cron-записей для приложений Laravel;регулярно проверять журналы выполнения задач.
Заключение
Cron — один из самых важных инструментов администрирования Linux-серверов. Он позволяет автоматизировать практически любые повторяющиеся операции: резервное копирование, очистку временных файлов, запуск команд Laravel, обработку очередей, обновление сертификатов и многое другое.
Понимание принципов работы Cron и умение правильно составлять расписания значительно упрощают сопровождение серверов и помогают исключить выполнение рутинных задач вручную. Для проектов на Laravel оптимальным решением является использование встроенного планировщика, который объединяет все задачи в одну удобную точку управления и делает код приложения более понятным и поддерживаемым.