Cron в Linux: автоматизация задач с примерами использования

Админ
3 часа назад
0 комментария
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 оптимальным решением является использование встроенного планировщика, который объединяет все задачи в одну удобную точку управления и делает код приложения более понятным и поддерживаемым.

Понравилась статья? Поделитесь:

💬 Комментарии 0

Оставить комментарий

Пока нет комментариев.

Будьте первым, кто оставит своё мнение!