Linux Crontab с примерами заданий Cron

Файл Crontab хранит задания для cron в Linux. Задания Cron выполняются периодически в определенное время, даты и интервалы. Его эквивалентом в Windows является планировщик задач, но cron гораздо более гибкий в своих возможностях. Все повторяющиеся задачи можно запланировать с помощью cron.

Файл Crontab — это файл конфигурации, который содержит информацию о времени и командах/скриптах для выполнения.

В этой статье мы разберем и подробно изучим Linux Crontab с примерами планирования заданий.

Crontab инструкция с примерами заданий cron на русском

Для понимания и чтобы не было путаницы следует запомнить что cron — это демон (служба) выполняемый в Linux. При своей работе он смотрит файлы /etc/crontab и другие, в которых описаны задачи для него. Можно вручную редактировать эти текстовые файлы, а можно использовать специальную утилиту которая также называется crontab. Эта утилита представляет из себя простейший текстовый редактор, а так же проверяет синтаксис написания заданий для cron. Поэтому если вы не уверены в своих действиях лучше использовать crontab. В случае ошибки crontab подскажет где вы ошиблись.

Синтаксис Crontab

Каждая строка в файле crontab представляет задание. Это задание содержит пять полей, за которыми следует команда  или скрипт для выполнения.

Синтаксис:
*(Minute)*(Hour)*(Day of the Month)*(Month of the Year) *(Day of the Week) username <path to command/script to execute>

* Минуты Это значение может быть в пределах 0 — 59
* Часы Это значение может быть в пределах 0 — 23
* День месяца Это значение может быть в пределах 1 — 31
* Месяц в году Это значение поля находится в диапазоне от 1 до 12. Так же можно использовать три первые буквы названия месяца, например: jan, feb, mar
* День недели Это значение поля находится в диапазоне от 0 до 7. Где 0 и 7-воскресенье. 1-понедельник, 2-вторник и так далее

 

Crontab инструкция

Указать несколько значений или диапазон

Для определения нескольких значений или диапазона используйте запятую (,) и дефис (-). Звездочка (*) соответствует чему угодно. Например, для отображения нескольких значений используйте 1,2,3, а для диапазона можно использовать 1-3.

пример:

0 10 1-3 * * /scripts/test.sh

Как использовать crotab

Команда crontab используется для открытия и редактирования/добавления заданий cron. Демон cron, запущенный в Linux, выполняет запланированные задания во время, определенное в crontab ( таблица cron). Основным общесистемным файлом crontab является файл /etc/crontab.

Cron по умолчанию установлен в большинстве дистрибутивов Linux. Каждый пользователь в системе Linux может управлять своими собственными заданиями cron. Каждый пользовательский cron хранится в папке /var/spool/cron/crontabs/ (может быть разным в разных дистрибутивах). Демон cron запускает как пользовательский, так и системный crontab.

Демон Cron имеет определенный путь $PATH по умолчанию, который вы можете найти в файле /etc/crontab. Если его не определить, либо используйте абсолютный путь, либо добавьте в переменную cron $PATH. Это стоит учитывать при написании заданий.

Уведомление по почте Cron по умолчанию отправляется владельцу кронтаба. Чтобы изменить это, отредактируйте переменную среды MAILTO.

Журналы Cron хранятся в системном журнале  /var/log/syslog в системах Ubuntu/Debian и в /var/log/cron в Redhat/Rocky Linux. Вы можете отфильтровать файл журнала с помощью команды grep, чтобы проверить, успешно ли выполнено задание cron или нет.

 

1. Редактировать/добавить задание для Crontab

Для редактирования (существующих заданий) или добавления нового cron используйте команду crontab -e. Это откроет редактор для текущего пользователя.

$ crontab -e

Чтобы отредактировать файл crontab другого пользователя, введите:

$ crotab -u username -e

Или просто запустите команду crontab -e, войдя в систему от имени этого пользователя.

2. Список задач Cron

Чтобы просмотреть список всех заданий текущего пользователя, введите:

$ crontab -l

Чтобы просмотреть список всех заданий cron для указанного пользователя, введите:

$ crontab -u username -l 

3. Удалить задачу cron

Чтобы удалить все задания cron текущего пользователя, выполните следующую команду:

# crontab -r

Примечание: Это приведет к удалению всех заданий cron без запроса подтверждения.

Если вы хотите удалить в интерактивном режиме, вам нужно использовать следующую команду:

# crontab -ir

 

Примеры заданий для Crontab

Давайте проверим некоторые примеры crontab для планирования заданий cron.

1. Запускать задания cron каждые 12 часов

Это помогает при регулярных проверках системы или резервном копировании. Чтобы запланировать выполнение задачи каждые 12 часов, введите:

0 */12 * * * /scripts/test.sh

2. Запускать задание cron каждые 5 минут

Иногда вам нужно следить за своей системой каждые n минут. Используйте следующее выражение для выполнения задачи каждые 5 минут.

*/5 * * * * /scripts/test.sh

3. Запускать работу cron каждый день в 2 часа ночи

Ежедневное резервное копирование может быть запланировано на определенное время. Следующее выражение запускает задание cron каждый день в 2 часа ночи.

0 2 * * * /script/test.sh

Чтобы запланировать работу cron каждый день в 2 часа дня, cron использует 24-часовые часы.

0 14 * * * /script/test.sh

4. Запустить задание cron каждый день в 12:30 утра

30 12 * * * /script/test.sh

5. Запустить задание cron каждую минуту

Например, у вас есть сценарий, который нужно запускать каждую минуту, используйте следующее выражение.

* * * * * /scripts/test.sh

6. Запуск задания cron в определенные минуты

Используйте следующее выражение cron для запуска сценария в 2, 15 и 30 минут.

2,15,30 * * * * /scripts/test.sh

7. Пример задания cron для запуска каждую субботу в 1 час ночи

Это поможет вам запустить резервное копирование в субботу в определенное время. Следующее выражение помогает выполнять работу cron каждую субботу в 1 час ночи.

0 1 * * sat /scripts/test.sh

8. Запуск задания cron для выполнения в определенные месяцы

Для выполнения заданий cron в 01:00 1-го числа месяца в январе, апреле и июне.

0 1 1 jan,apr,jun *  /script/test.sh 

9. Запуск задания cron в выбранные дни

Чтобы запускать задания cron в выбранные дни, такие как суббота и воскресенье, используйте:

0 4 * * sat,sun  /script/test.sh

10. Выполнить задания cron в определенные часы дня

В 0 минут каждого часа с 9 по 17

0 9-17 * * * /script/test.sh

11. Выполнить задание cron дважды в каждую субботу и воскресенье

Задания Cron позволяют выполнять задачи в определенные часы в определенные дни

0 2,23 * * sat,sun /scripts/test.sh

12. Запустить задание cron в период с понедельника по пятницу

В 02:00 каждый день с понедельника по пятницу.

0 2 * * mon-fri /scripts/test.sh

13. Запуск задания cron ежемесячно

Вместо использования 0 0 1 * *, вы можете использовать ярлык с помощью @monthly. Он работает в 00:00 1-го числа месяца. В качестве альтернативы вы можете разместить свой скрипт в /etc/cron.monthly/.

@monthly /scripts/test.sh

14. Запуск задания cron еженедельно

Вместо использования 0 0 * * mon, вы можете использовать ярлык с помощью @weekly. Он начинается в 00:00 в понедельник. В качестве альтернативы вы можете разместить свой скрипт в файле /etc/cron.weekly/.

@weekly /scripts/test.sh

15. Запуск задания cron ежедневно

Вместо использования 0 0 * * *, вы можете использовать ярлык с помощью @daily. Это работает каждый день в 00:00. В качестве альтернативы вы можете разместить свой сценарий в файле /etc/cron.daily/.

@daily /scripts/test.sh

16. Выполнение задания cron каждый час

Вместо использования 0 */1 * * *, вы можете использовать ярлык с помощью @hourly. Он работает в 0 минут каждый час. В качестве альтернативы вы можете разместить свой скрипт в файле /etc/cron.hourly/.

@hourly /scripts/test.sh

17. Запуск задания cron при перезагрузке

Для запуска задачи при каждой перезагрузке системы используйте строку @reboot. Скрипт будет выполнен после перезагрузки.

@reboot /scripts/test.sh

18. Запуск задания для cron каждые 30 секунд

Cron позволяет работать только с минутами. Не существует простого способа запланировать выполнение задания каждые 30 секунд.

Но мы можем использовать обходной путь, увеличив задержку на 30 секунд.

 * * * * /scripts/run.sh
 * * * *  sleep 30; /scripts/run.sh

19. Запустите задание cron и перенаправить вывод

Если наш скрипт имеет какой-то вывод, нам, возможно, захочется его увидеть. Для этого можно сохранить его в отдельный файл. Этот пример позволит запускать php-скрипт каждые 3 минуты и перенаправлять вывод в файл.

Обратите внимание что тут используются абсолютные пути, так как мы не определили нашу переменную $PATH.

*/3 * * * * /usr/bin/php /script/run.php >> /var/log/run.log

20. Запустить задание cron для выполнения сразу нескольких команд

Чтобы запустить cron для выполнения нескольких команд, используйте оператор && между командами.

0 */12 * * Sun command1 && command2

Резервное копирование заданий cron

Для бекапа задач cron, можно использовать следующую команду:

# crontab -l > /backup/cron/root-bckup.txt

Для бекапа задач cron определенного пользователя:

# crontab -u userName -l > /backup/cron/user-bckup.txt

Чтобы восстановить cron из файла резервной копии, просто используйте:

# crontab /backup/cron/root-backup.txt

Вывод

Утилита crontab и сам планировщик заданий для Linux Cron — очень мощный и полезный инструмент для автоматизации рутинных задач. В этой статье я описал множество простейших примеров использования заданий cron.

Если у вас есть какие-либо отзывы и предложения (или вы нашли ошибку в тексте), пожалуйста, прокомментируйте их ниже.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Похожие записи: