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 или нет.

 

Типы файлов конфигурации сron

Существуют два типа файлов конфигурации службы cron:

  1. Системный файл crontab. Обычно используется системными службами и критическими заданиями, требующими привилегий root-доступа. Системные файлы crontab состоят из полей. Пять из них заполнены данными о времени, а в шестом поле указывается имя пользователя, от которого запускается команда. То есть crontab дает системе возможность запускать команды от имени разных пользователей.
  2. Пользовательский crontab. Пользователь может установить свои собственные задания в планировщике сron, используя команду crontab. В этом случае, шестое поле — это команда для запуска. Следовательно, все команды будут выполняться от имени пользователя, который задал их в своем собственном crontab.

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

Если ничего не работает?

Самая популярная проблема по работе с CRON — это то что он имеет свою уникальную переменную $PATH и она отличается от пользовательской. От сюда у обычных пользователей возникает куча проблем. И несмотря на то, что про это написано во всех инструкциях и даже в этой статье есть целый абзац про это. Но кто же читает эти инструкции? Просто запомните что крон не знает ничего про пользовательские .profile, .bashrc и подобное, в том числе ваш $PATH и надо всё писать как без них. То есть все пути до ваших скриптов и до всех утилит должны быть полные.

Вывод

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

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

5 мыслей о “Linux Crontab с примерами заданий Cron

  • 20.10.2021 в 23:31
    Permalink

    пригодилось, очень вовремя наткнулся на эту статью прo cron

    Ответ
  • 07.11.2021 в 23:37
    Permalink

    Показать все задания Cron для всех пользователей:

    for user in $(cut -f1 -d: /etc/passwd); do sudo crontab -u $user -l 2>/dev/null | grep -v ‘^#’; done

    Ответ
  • 02.03.2022 в 14:58
    Permalink

    Годная статья, всё подробно разжевано. Даже я смог осилить.

    Ответ
  • 03.08.2023 в 20:50
    Permalink

    Я наверное никогда не запомню эти команды. Просто когда бывает нужно каждый раз вбиваю в поиске: «crontab команды нихрена не помню» и всё время попадаю на этот сайт.

    Ответ
  • 07.01.2024 в 22:12
    Permalink

    Спасибо, нашёл нужную команду. Хорошо что много примеров. На все случаи жизни.

    Ответ

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

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

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