Краткое введение в ключевые концепции cron
Позвольте сначала познакомить вас с некоторой базовой концепцией «cron».
Разница между Cron, Crontab и Cron Job
Визуальный взгляд на вещи помогает быстрее понять новые темы. Вот разбивка того, как эти три темы обычно взаимодействуют. Затем я опишу каждый более подробно.
Элемент | Имя Linux | Смысл |
---|---|---|
Daemon (Демон) | ‘crond’ | Произносится «demon» или «day-mon». Это фоновые системные процессы Linux. |
Table (Таблица) | ‘crontab’ | Вы записываете строки в эту таблицу при вводе команды crontab. Каждая звездочка «*» представляет отрезок времени и соответствующий столбец в каждой строке. |
Job (Задача) | Cron Job | Конкретная задача, которая должна быть выполнена, описана в строке в сочетании с назначенным ей идентификатором времени |
Таблица Cron
Crontab означает Cron Table. Это системный файл Linux, который создает табличную структуру, в которой поля разделяются пробелами. Пользователи могут заполнять таблицу, присваивая значения каждому полю (звездочка).
Если это поможет, вы можете думать о вашем crontab как о мини-базе данных.
Cron Job
Если вы не знакомы с базами данных, вы можете представить ячейки в пустом файле Excel. В любом случае, для этой аналогии каждая звездочка представляет столбец, значение которого определяется его заголовком. Последний столбец будет вызовом команды или сценария. Каждый полный ряд можно рассматривать как отдельную работу. Их часто называют “cron jobs”, хотя работа, задание и т. д. Являются взаимозаменяемыми терминами.
Демон Cron
Мы уже обсуждали таблицу и как мы заполняем ее рабочими местами. Но как эти работы выполняются? Системный процесс под названием Daemon выполняется на фоне нашего Linux-компьютера.
Есть демоны для разных сервисов. Обычно они называются суффиксом «d» к имени службы.
Естественно, демон cron называется «crond». С нашей стороны не требуется никаких действий для запуска этого демона, но если вы считаете, что команда не работает должным образом, вы можете использовать команду ps, чтобы убедиться, что crond запущен.
ps aux | grep crond
Эта команда будет искать текущие процессы для всех пользователей и возвращать любые экземпляры ‘crond’.
andreyex@destroyer:~$ ps ux | grep crond andrey+ 4352 0.0 0.0 18612 840 pts/0 S+ 02:16 0:00 grep --color=auto crond
Мы видим, что демон запущен для нашей учетной записи.
Понимание синтаксиса Crontab
Теперь, когда у вас есть смутное представление о том, как работает cron, давайте посмотрим на синтаксис использования crontab. Мы надеемся, что это менее запутанно, если вы можете представить эту информацию в виде таблицы в вашем уме.
crontab * * * * * <command> OR * * * * * <path/to/script>
Мы обещаем, что это произойдет, потому что для вас, как только мы приведем в действие наш собственный пример. Давайте снова рассмотрим синтаксис для заданий cron.
Как видите, синтаксис crontab состоит из 5 звездочек. Вот что представляет каждая из этих звездочек:
первая | вторая | третья | четвёртая | пятая | |
---|---|---|---|---|---|
* | * | * | * | * | |
ID | Минуты | Часы | День | Месяц | Название дня |
Values | 0-59 | 0 -23 | 1-31 | 1-12 | 0-6 |
ПРИМЕЧАНИЕ
названия дней от 0-6 начинаются с воскресенья.
Чтобы запланировать задачу, вы заменяете соответствующую звездочку на желаемое значение.
Давайте немного потренируемся. Если у вас есть crontab, подобный приведенному ниже, как вы думаете, когда работа будет запущена?
0 0 * * 0
Вопрос: Когда команда будет запущена, если вы зададите задание таким образом?
A. Каждый час с понедельника по субботуB. Каждая минута по воскресеньямC. Только в полночь с понедельника по субботуD. Только в полночь по воскресеньям
Ответ здесь . Выполнять «команду» в 00:00 каждое воскресенье.
Настройка Cron
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становится причиной проблем.
Синтаксис crontab
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле — то каждую минуту и так далее. Ну а теперь перейдем к примерам.
Примеры настройки cron
Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
Вы можете удалить все существующие задачи командой -r:
Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример — запускать его каждую минуту:
Далее, усложним, будем запускать каждый час, в нулевую минуту:
Еще дальше:
Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
Если идти так дальше, то можно запускать в первый день каждого месяца:
Можно в любой день, например, 15 числа:
В первый день недели первого месяца года, 0 часов 0 минут:
Или в нулевой день недели каждого месяца:
Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
Понедельник считается первым днем, воскресенье — это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun — воскресенье:
Для того чтобы указать определенный интервал нужно использовать символ «-«, например, каждый час, с семи утра до семи вечера:
Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
- @reboot — при загрузке, только один раз;
- @yearly, @annually — раз год;
- @monthly — раз в месяц;
- @weekly — раз в неделю;
- @daily, @midnight — каждый день;
- @hourly — каждый час.
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.
Отладка работы
После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:
Она должна выполняться в 19.40 каждый день, теперь смотрим лог:
И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.
Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:
Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.
×
Что произойдет, если задание cron обнаружит ошибку?
Поведение по умолчанию – отправлять по электронной почте свой вывод. Эта функция предназначена для администраторов, которые могут автоматически отправлять журналы на «локальную» электронную почту в домене сети.
Вы можете настроить это самостоятельно, если у вас есть почтовый сервер. Существуют также способы автоматизации вывода электронной почты в GMail или аналогичные сервисы. Тем не менее, эти методы выходят за рамки данной статьи.
Вместо этого мы рассмотрим два распространенных способа обойти ошибку.
1) Отправить вывод в файл
Вы можете назначить файл для этого типа вывода для отправки, а затем использовать >> для перенаправления вывода.
Использование >>добавит информацию в существующий файл, в то время как один символ > перезапишет файл
Это важно знать, если вы хотите поддерживать большой файл журнала, который часто обновляет записи. Оба автоматически создадут файл, если он не существует
Пример работы Cron:
0 * * * * echo "Linux это круто!" >> ~/crontab_log.txt
2) Используйте /dev/null
Это обойдёт опцию электронной почты, по сути удалив данные. Стандартная ошибка (‘2’) и стандартный вывод (‘1’) отправляются в нулевой файл.
0 0 * * * echo "Why are you silencing me every night at midnight?" > /dev/null 2>&1
Вы могли заметить, что мы используем команду echo для примеров. Для этого нет особой причины, но она позволяет легко проверять изменения и «проверять свою работу».
Если вы немного программировали, возможно, вы использовали команду print для проверки вашей логики. Это та же концепция.
Давайте попробуем создать нашу собственную работу cron. Если вы уже «подыгрываете», это здорово. Если нет, то сейчас самое время подготовить этот терминал и повеселиться.
Перекрытия задач
Бывают случаи, когда запланированные задачи занимают гораздо больше времени, чем ожидалось. Это приведет к перекрытиям, то есть некоторые задачи могут выполняться одновременно. В некоторых случаях это может не вызвать проблемы, но когда они изменяют одни и те же данные в базе данных, у нас возникнет проблема. Мы можем преодолеть это, увеличив частоту выполнения задач. Тем не менее, нет никакой гарантии, что эти перекрытия не повторятся.
У нас есть несколько вариантов предотвращения перекрытия заданий cron.
Использование Flock
Flock — хороший инструмент для управления файлами блокировки из сценариев оболочки или командной строки. Эти файлы блокировки полезны для того, чтобы узнать, запущен ли скрипт.
При использовании совместно с Cron соответствующие задания cron не запускаются, если файл блокировки существует. Вы можете установить Flock, используя или в зависимости от дистрибутива Linux.
Или:
Рассмотрим следующую запись crontab:
В предыдущем примере ищет . Если блокировка будет получена за одну секунду, она запустит скрипт. В противном случае он потерпит неудачу с кодом выхода 1.
Использование механизма блокировки в скриптах
Если задание cron выполняет сценарий, мы можем реализовать механизм блокировки в сценарии. Рассмотрим следующий PHP-скрипт:
В предыдущем коде мы сохраняем текущий PHP-процесс в файле, который находится в системном каталоге. Каждый PHP-скрипт имеет свой собственный файл блокировки, который является MD5-хэшем имени файла скрипта.
Сначала мы проверяем, существует ли файл блокировки, а затем получаем его содержимое, которое является идентификатором процесса последнего запущенного экземпляра скрипта. Затем мы передаем PHP-функцию posix_getsid , которая возвращает идентификатор сеанса процесса. Если возвращается , это означает, что процесс больше не работает, и мы можем безопасно запустить новый экземпляр.
Accessing and modifying your data
If you have any questions or want to know which personal data we have about you, please contact us. You can contact us by using the information below. You have the following rights:
- You have the right to know why your personal data is needed, what will happen to it, and how long it will be retained for.
- Right of access: You have the right to access your personal data that is known to us.
- Right to rectification: you have the right to supplement, correct, have deleted or blocked your personal data whenever you wish.
- If you give us your consent to process your data, you have the right to revoke that consent and to have your personal data deleted.
- Right to transfer your data: you have the right to request all your personal data from the controller and transfer it in its entirety to another controller.
- Right to object: you may object to the processing of your data. We comply with this, unless there are justified grounds for processing.
Please make sure to always clearly state who you are, so that we can be certain that we do not modify or delete any data of the wrong person.
Запуск фоновых задач Cron каждые 10 минут
Используйте следующее, если хотите проверять место на диске каждые 10 минут.
Эта задача выполняет указанную команду проверки диска каждые 10 минут на протяжении года. Но вам может потребоваться выполнение проверки только в рабочие часы или наоборот. Приведённые выше примеры показывают, как это сделать.
Вместо указания значений в 5 полях мы можем указать их, используя ключевое слово, как показано ниже.
Существуют особые условия, когда вместо 5 полей вы можете использовать и далее ключевое слово – такие как перезагрузка, полночь, ежегодно, ежечасно.
Специальные ключевые слова Cron и их значение
Ключевое слово | Эквивалент |
---|---|
Запуск системы |
Необходимый базовый уровень
- Базовый опыт работы с командной строкой;
- Навыки работы с SSH на сервере Linux.
Задачи
- Научиться настраивать простую запланированную задачу (задание cron) в среде Linux-сервера;
- Установить задачу cron для отправки электронной почты ежедневно в указанное время.
Отправка электронной почты с помощью PHP
Сначала нужно создать простой PHP-скрипт для тестирования Cron Linux настройки. Я собираюсь создать файл, который отправляет электронную почту:
<?php $to = 'me@example.com'; $message = 'This is the message.'; $subject = 'Insert Subject Here'; $headers = 'From: noreply@example.com' . "rn" . 'Reply-To: me@example.com'; @mail($to, $subject, $message, $headers); ?>
Если вы не знакомы с PHP-функцией mail() ознакомьтесь с официальной документацией. Я устанавливаю переменные, задающие получателя, электронный адрес отправителя, тему, содержание письма и заголовки. Это не самый современный или безопасный способ отправки электронной почты. Но это работает, поэтому я собираюсь использовать его для тестирования. Сохраняем код в файле cron.php.
Путь к публичной папке будет зависеть от дистрибутива Linux, но я поместила файл cron.php в /var/www/html/crontest. Поэтому полный путь к моему скрипту будет следующим: /var/www/html/crontest/cron.php. Вы можете протестировать этот скрипт непосредственно в браузере. Если адрес вашего сайта example.com, скорее всего, адрес файла будет example.com/crontest/cron.php. Если вы запускаете файл и получаете электронное письмо, значит, скрипт работает.
Localhost не настроен для отправки PHP-почты, поэтому этот скрипт должен запускаться из среды Linux.
Основной синтаксис Cron
Есть полезный сайт под названием Crontab Generator, который может настроить Cron PHP, но сначала мы кратко рассмотрим основной синтаксис.
Пример работы Cron:
* * * * * /usr/bin/php /var/www/html/crontest/cron.php > /dev/null 2>&1
Части команды cron
Команда cron состоит из четырех основных частей:
Время выполнения Выполнение PHP Путь к скрипту Результат * * * * * /usr/bin/php /var/www/html/crontest/cron.php > /dev/null 2>&1
Время выполнения — устанавливает минуты, часы, дни, месяцы и день недели.
Выполнение — задача cron должна вызвать PHP, который находится в папке /usr / bin / php.
Путь к скрипту — полный путь к файлу, который необходимо запустить.
Результат (необязательно) — можно записать результат в файл или отбросить эту часть > /dev/null 2>&1.
В приведенном выше примере задача Cron Linux настроена на отправку электронной почты каждую минуту часа ежедневно. Звездочка — это подстановочный знак, обозначающий «все».
- Минуты — установите минуты, от 0 до 59;
- Часы — установите часы, от 0 до 24;
- Дни — установите день, от 1 до 31;
- Месяцы — установите месяц, от 1 до 12 (январь-декабрь);
- Неделя — установите день недели, от 0 до 6 (воскресенье — суббота).
Вот несколько простых примеров:
Синтаксис Пояснение 0 * * * * запускается один раз в час (каждую нулевую минуту каждого часа). 0 0 * * * запускается один раз в день (в полночь каждого дня в нулевую минуту). 0 0 1 * * запускается один раз в месяц (в первый день каждого месяца в полночь в нулевую минуту). 0 0 1 1 * запускается один раз в год (в первый день первого месяца в полночь в нулевую минуту).
Существуют и другие настройки, например, для нечетных / четных дней, каждые 5 минут и т. д. Также доступно множество ресурсов, на которых можно найти конкретные настройки.
Настройка задачи Cron
Если cron настроен под учетной записью root, тогда нужно запустить sudo перед запуском кода.
Команда cron называется crontab. Мы задаем для нашей задачи выполнение рассылки электронной почты один раз в день, так что полная команда будет такой:
0 0 * * * /usr/bin/php /var/www/html/crontest/cron.php >/dev/null 2>&1
После того, как вы зашли на сервер SSH, можно проверить, существуют ли другие текущие задачи. Это можно сделать с помощью следующей команды.
crontab -l crontab: no crontab for user
Теперь мы отредактируем crontab:
crontab -e
На этот момент вы, скорее всего, будете работать в редакторе vi, если вы никогда не меняли редактор своего сервера по умолчанию. В первый раз при настройке Cron это может немного сбивать с толку.
Вот что нужно сделать:
- Нажмите esc;
- Нажмите i, чтобы начать редактирование файла;
- Вставьте команду cron в файл;
- Снова нажмите esc, чтобы выйти из режима редактирования;
- Введите :wq, чтобы сохранить изменения в файле (w — write) и выйти (q — quit).
Теперь crontab сохранен, и электронное письмо должно отправляться один раз в день в полночь. Вы можете установить * / 5 * * * * — каждые 5 минут, чтобы проверить его работу.
Также можно добавить в файл несколько задач cron. Для этого поместите каждую команду в отдельную строку.
Отправка уведомлений cron на e-mail
Если вы хотите получать информацию о выполнении ваших задач cron по почте, нужно выполнить настройку cron-файла с задачами.
Для отправки почты на сервере дожен быть установлен почтовый-агент. Для теста, я установил на сервер sendmail:
sendmail – бесплатный агент для передачи почты, который доступен практически для любой операционной системе.
MAILTO="*@gmail.com" SHELL=/bin/bash HOME=/ * * * * * echo "Проверка cron"
MAILTO — укажите свой почтовый ящик
SHELL — оболочка пользователя
HOME — путь к файлу cron
Информацию о запуске задания cron можно сохранять в лог-файл. Для этого, в конце задания нужно добавить >> и указать путь до лог-файла:
Если в вашем cron-файле добавлено много заданий и результат выполнения каких-то из них, не нужно отправлять на почту, данные задания вы можете запускать в «бесшумном» режиме:
Таким образом вы можете отделить некоторые задания, чтобы не отправлять уведомления о всех задания себе на почтовый ящик.
Setting Up a Cron Job
To configure a cron job, open the crontab with a preferred text editor and input the syntax for the command you want to run.
How to Edit the crontab File?
To open the crontab configuration file for the current user, enter the following command in your terminal window:
You can add any number of scheduled tasks, one per line.
Once you have finished adding tasks, save the file and exit. The cron daemon will read and execute the instructions provided.
Remember, Cron does not need to be restarted to apply changes.
Edit crontab for a Different User
To edit the crontab for a another user, enter the following command:
Note: If you need to run a cron job on reboot, please refer to our Crontab on Boot guide.
О чем следует помнить перед программированием процесса в Linux?
Процессы программирования Они не так просты, как многие могут подумать, для этого нужно немного знание компьютера это поможет вам значительно улучшить этот процесс легче усваивать и выполнять. В случае В Linux есть инструмент Cron что позволяет проводить расписания задач и автоматизация в операционной системе.
Эти типы инструментов очень важны, поэтому вы должны знать, как ими пользоваться, они позволят вам время от времени автоматически выполнять сценарий или файл PHP или любой другой элемент компьютера, который вы хотите. Это позволит избежать необходимости обращаться к иметь возможность активировать его вручную, так что смысла в этом нет.
Имейте в виду, что когда эти типы программирования выполняются в Linux, они позволяют вам разрабатывать и облегчать определенные типы задач, такие как следующие:
- Настроить задачи обновления автоматически.
- Настроить резервное копирование автоматический.
- Сделай дела по расписанию в Linux сервер.
- Установите задачу, которая Я отправил почтовое отправление так что этого не нужно делать ручной способ, а скорее автоматически.
anacron
anacron — (англ. anachronistic cron) асинхронный или анахроничный cron. Anacron в отличие от cron не поддерживает запуск заданий по расписанию, вместо этого задания запускаются с заданным интервалом времени. Это очень удобно для систем которые работают не регулярно, например домашние рабочие станции или ноутбуки. Anacron хранит метки времени файлов в /var/spool/anacron, чтобы записывать время выполнения заданий. При запуске anacron проверяет, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз, и при необходимости запускает ее. Задачи anacron хранятся в конфигурационном файле /etc/anacrontab. Синтаксис данного файла аналогичен /etc/crontab, за исключением полей таблиц:
* * * выполняемая_команда - - - | | | | | --------- идентификатор | ----------- задержка ------------- период
Период — период выполнения в днях. Задержка — задержка запуска в минутах. Идентификатор задания — любой непустой символ, кроме / \. Задержка чаще всего используется для того чтобы позволить системе полностью загрузиться.
На сегодня все. Давайте подведем маленький итог тому что сегодня узнали:
В Linux есть такой чудо демон — cron. Демон cron при загрузке, а так же — после загрузки каждую минуту «шерстит» файл /etc/crontab, каталог /etc/cron.d/ и каталог с пользовательскими таблицами заданий (/var/spool/cron/crontabs) и сверяет текущее время и строку в «просматриваемом» файле и запускает указанную команду, когда значения полей минута, час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем.
Так же есть чудо-средство anacron, которое сравнивает не текущее время со временем задания в crontab, а сколько прошло времени с последнего запуска задания, указанного в /etc/anacrontab и если прошел указанный промежуток времени, то задание запускается.
Настройте доступ crontab для вашей учетной записи пользователя
Crontab зависит от пользователя. Вы уже затронули это немного. Если вы думаете, что вы уже использовали crontab, вы можете проверить это с помощью crontab -l .
andreyex@destroyer:~$ crontab -l no crontab for andreyex andreyex@destroyer:~$ crontab -e no crontab for andreyex - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/code 3. /bin/ed Choose 1-3 : 1
Когда мы запускаем эту команду, вы видите, что у нас нет crontab в этой системе.
Поскольку мы еще не создали crontab, когда используем -e для редактирования таблицы, он запрашивает наш предпочтительный текстовый редактор. Nano предлагается в качестве самой простой в использовании программы. Вы можете использовать любой текстовый редактор командной строки, например Vim или Emacs. Это действительно зависит от вас.
Если сначала не получится, sudo
Если вы попытаетесь выполнить команду crontab -e, но не получите этот результат, у вас могут не быть привилегий пользователя для создания таблицы. Если у вас есть доступ к sudo, вы можете использовать sudo для установки crontab.
sudo crontab -e <your_username>
Ваша система автоматически загрузит ваш crontab в нужное место, которое может варьироваться в зависимости от дистрибутива, но часто находится в каталоге, таком как /var/spool/cron/crontabs. Не пытайтесь редактировать файлы здесь.
Как работает Cron
Задачи в cron записываются и управляются в специальном файле . Каждый профиль пользователя в системе может иметь собственный файл crontab, где составляются расписания задач, который хранится в директории .
Чтобы запланировать задачу, вам нужно открыть ваш файл crontab для редактирования и добавления задачи, написанной в форме выражения cron. Синтаксис выражений cron можно разбить на два элемента: расписание и команда для запуска.
Команда может быть практически любой командой, которую вы можете запустить в командной строке. Компонент расписания в синтаксисе разбит на 5 разных полей, которые расположены в следующем порядке:
Поле | Допустимые значения |
---|---|
минута | |
час | |
День месяца | |
месяц | или |
День недели | или |
Все вместе задачи, запланированные в crontab, выглядят следующим образом:
Ниже представлен функциональный пример выражения cron. Это выражение запускает команду каждый вторник в 17:30:
Также существует несколько специальных символов, которые вы можете включить в компонент расписания выражения cron, что упрощает создание расписания:
- : в выражениях cron звездочка () служит подстановочным символом, который представляет все значения. Таким образом, задача, запланированная в форме ` * * * * …`, будет запускаться каждую минуту, каждый час, каждый день каждого месяца.
- : запятые разбивают значения расписания для получения списка. Если вы хотите запускать задачу в начале и середине каждого часа, а не выполнять две отдельные задачи (например, и ), вы можете добиться той же функциональности с помощью одного выражения ().
- : дефис представляет диапазон значений в поле расписания. Вместо создания 30 отдельных запланированных задач для команды, которую вы хотите запускать первые 30 минут каждого часа (например, , , и т. д.), вы можете просто запланировать его следующим образом: .
- : вы можете использовать косую черту со звездочкой для выражения значения шага. Например, вместо написания восьми отдельных задач cron для запуска команды каждые три часа (например, , , и т. д.), вы можете задать расписание для запуска следующим образом: .
Примечание. Вы не можете выражать значения шага произвольно, допускается использование только целых чисел, которые равномерно делят диапазон, допустимый для данного поля. Например, в поле «часы» вы можете указать после косой черты только , , , , , или .
Ниже представлено несколько примеров использования компонента расписания cron:
- — запускать команду каждую минуту.
- — запускать команду 12 минут в начале каждого часа.
- — запускать команду каждые 15 минут.
- — запускать команду каждые 15 минут.
- — запускать команду каждый день в 4:00.
- — запускать команду каждый вторник, среду и четверг в 4:00.
- — запускать команду в 20-ю и 40-ю минуту каждого 8-го часа каждый день последних 6 месяцев года.
Если вы найдете что-то из этого затруднительным или вам потребуется помощь при написании расписания для ваших собственных задач cron, Cronitor предоставляет удобный редактор выражений cron, который называется Crontab Guru и который вы можете использовать для проверки действительности ваших расписаний cron.
Устранение проблем
Если появляются проблемы во время работы cron, этот краткий список может быть полезным.
Запомните, каждый пакет cron отличается от других, и диапазон возможностей сильно разнится. Проконсультируйтесь с man-страницами для crontab, fcrontab или anacrontab, в зависимости от того, какой cron демон используется.
Cron работает?
Попробуйте следующее:
Код Пример файла crontab для того, чтобы проверить работает ли cron
* * * * * /bin/echo "foobar" >> /file_you_own
Затем проверьте модифицируется ли файл /file_you_own периодически.
Работает ли команда из задачи cron?
То же самое, что и раньше, но также перенаправьте стандартный вывод ошибок:
Код Пример файла crontab для того, чтобы проверить работает ли cron
* * * * * /bin/echo "foobar" >> /file_you_own 2>&1
Управление выводом задачи cron
Поскольку задачи cron выполняются в фоновом режиме, не всегда очевидно, что они были запущены успешно. Теперь, когда вы знаете, как использовать команду и как запланировать задачу cron, вы можете начать экспериментировать с различными способами перенаправления результатов выполнения задач cron, чтобы помочь вам отследить их успешное выполнение.
Если у вас есть агент передачи почты, например, Sendmail, который установлен и настроен на сервере, вы можете отправить результат выполнения задачи cron на электронный адрес, связанный с вашим профилем пользователя Linux. Также вы можете вручную задать адрес электронной почты, указав параметр вверху crontab.
Например, вы можете добавить следующие строки в файл crontab. К ним относятся оператор , за которым следует пример адреса электронной почты, директива , которая указывает оболочку для запуска (в данном примере ), директива , указывающая путь поиска бинарного файла cron, и единственная задача cron:
Эта конкретная задача будет возвращать «Run this command every minute», а этот вывод будет отправляться каждую минуту на адрес электронной почты, заданный директивой .
Также вы можете перенаправить вывод задачи cron в файл журнала или в пустую директорию, чтобы не получать электронное сообщение с выводом.
Чтобы добавить вывод запланированной команды в файл журнала, добавьте в конец команды, после чего укажите имя и расположение файла журнала, как показано здесь:
Скажем, что мы хотим использовать cron для запуска скрипта, но скрипт при этом должен выполняться в фоновом режиме. Для этого вы можете перенаправить вывод скрипта в пустую директорию, например , которая немедленно удаляет все данные, добавляемые в нее. Например, следующая команда cron выполняет скрипт PHP и запускает его в фоновом режиме:
Эта задача cron также перенаправляет — представляемую как — в стандартный вывод (). Поскольку стандартный вывод уже перенаправляется в директорию , это позволяет запускать скрипт без лишнего шума. Даже если в crontab содержится оператор , вывод команды не будет отправляться на заданный адрес электронной почты.