Cron

Составление расписания заданий

Составление расписания — задача несложная. Расписание размещается в отдельном файле crontab . В каждой строке файла помещается задание, которое должно быть запущено в определенное время.


Формат записей файла crontab

Часть time-date (время-дата) состоит из пяти числовых полей, разделенных пробелами и определяющих время запуска задания:

Для удобства заполнения указанных полей введены следующие правила:

  • Можно указывать значения в виде численных интервалов. К примеру, интервал 1-3 в поле часов означает 1.00, 2.00 и 3.00 пополуночи, 2-4 в поле дня недели — вторник, среду или четверг.
  • Интервалы можно задавать с шагом больше единицы. Например, чтобы указать каждый второй час, начиная с полуночи, следует установить интервал 0-23 с шагом 2 через косую черту: 0-23/2
  • Звездочка (*) указывает полный интервал значений поля — от минимального до максимального. Например, в поле дня месяца звездочка означает интервал 0-31, в поле дня недели — 0-7
  • День недели или месяц можно указать первыми тремя буквами его (английского) названия

Примеры времени-даты

Несколько примеров заполнения полей времени-даты:

0 1 * * * Запуск задания ежедневно в 1.00 пополуночи 30 14 * * 0 Запуск задания по воскресеньям в 2.30 пополудни 0 23-7/2,8 * * * Запуск задания каждые 2 часа с 23.00 до 7.00 и в 8.00 0 12 * 1 mоn Запуск задания в полдень каждого понедельника января каждого года 0 12 2 feb * Запуск задания в полдень второго февраля каждого года

Поле command

Поле command (команда) отделено от полей времени-даты одним или несколькими пробелами и простирается до конца строки. Команды обрабатываются оболочкой /bin/sh .

Например, следующая запись в файле crontab предусматривает ежедневный запуск программы /usr/sbin/backup в 1.00 пополуночи:

0 1 * * * /usr/sbin/backup

Некоторым командам (например, mail) требуется ввод информации с устройства стандартного ввода. Это указывается при помощи знака процента (%). Первый такой знак обозначает начало стандартного ввода, каждый последующий — смену строки.

Файлы конфигурации и логи планировщика cron

Основной файл конфигурации демона cron —  /etc/crontab. Помимо cron-файла, задачи можно запускать из следующих директорий:

  • /etc/cron.daily – запуск скриптов один раз в день
  • /etc/cron.hourly – запуск скриптов ежечасно
  • /etc/cron.monthly – запуск скриптов раз в месяц
  • /etc/cron.weekly – запуск скриптов раз в неделю

Просто разместите нужны скрипты в нужную директорию, и они будут выполняться согласно расписания.

Можно ограничить доступ к планировщику с помощью файлов /etc/cron.allow и /etc/cron.deny. Достаточно создать эти файлы и добавить в него пользователей, которым, соотвественно, разрешено и запрещено запускать задания cron.

В файл /etc/crontab тоже можно помещать задания. Обычно данный файл используется root пользователем или для настройки системных задач. Личные файлы пользователей для cron заданий, хранятся в директории /var/spool/cron/ или /var/cron/tabs/.

Чтобы отследить выполнение задач или отследить ошибки, можно обратиться к лог-файлу /var/log/cron. В данном файле фиксируется запуск всех задач и ошибки в работе демона, если они есть:

What to do when you get a list of all scheduled cron jobs on your system?

Now you know how to list the cron jobs on your Linux or Unix server or VM. Make sure you backup all cron jobs too. Typically I backup the following in directories:

  • /var/spool/cron/
  • /var/spool/anacron/
  • /etc/cron*

You learned how to list, display, and view all current Linux cron jobs. See the following tutorials for more info:

This entry is 5 of 16 in the Linux Cron Jobs Howto & Tutorial series. Keep reading the rest of the series:

  1. What is cron on a Linux or Unix-like systems?
  2. How To Add Jobs To cron Under Linux or UNIX?
  3. Verify crond Daemon And Cronjobs Are Running
  4. Start Restart and Stop The Cron or Crond Service
  5. List / Display All Cron Jobs
  6. Linux / UNIX Crontab File Location
  7. Change Crontab Email Settings ( MAILTO )
  8. Disable The Mail Alert By Crontab Command On a Linux or Unix-like Systems
  9. At What Time Cron Entries In cron.daily, cron.weekly, cron.monthly Run?
  10. Execute Cron Job After System Reboot
  11. Setup and Run PHP Script As A Cron Job
  12. Run crontab job every minute on a Linux or Unix-like system
  13. Running crontab (cron jobs) Every 10 Minutes
  14. Cron Job Script Execution on the Last Day of a Month
  15. Execute / Run crontab (cron jobs) every 1 minute
  16. Ubuntu create cron.log file

5: Ограничение доступа

Вы можете указать, каким пользователям разрешено использовать команду crontab, с помощью файлов cron.allow и cron.deny, которые хранятся в каталоге /etc/. Если файл cron.deny существует, любому из перечисленных в нем пользователей будет запрещено редактировать свой crontab. Если файл cron.allow существует, только пользователи, перечисленные в нем, смогут редактировать свои файлы crontab. Если оба файла существуют и в каждом из них указан один и тот же пользователь, файл cron.allow переопределит cron.deny, и в результате пользователь сможет редактировать свой crontab.

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

Сначала команда блокирует всех пользователей, добавляя ALL в файл cron.deny. Затем мы вносим имя пользователя ishmael в файл cron.allow, что открывает ему доступ к выполнению cron.

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

Но если cron.deny существует, пользователь user-2 указан в нем и не указан в cron.allow, после выполнения предыдущей команды вы получите следующую ошибку:

Configuration

Permitting users to run cron jobs

Cron jobs can be allowed or disallowed for individual users, as defined in the files /etc/cron.allow and /etc/cron.deny. If cron.allow exists, a user must be listed there to be allowed to use a given command. If the cron.allow file does not exist but the cron.deny file does, then a user must not be listed there to use a given command. If neither of these files exists, only the superuser will be allowed to use a given command.

Cron permissions can also be defined using PAM (pluggable authentication module) authentication to set up users who may or may not use crontab and system cron jobs. PAM configuration is located in /etc/cron.d/.

Configuring the temp directory

The temporary directory for cron jobs can be set in environment variables listed below. If these variables are not defined, the default temporary directory /tmp is used.

Configuration files

File Description
/etc/cron.allow If this file exists, users must be listed in this file to be able to run cron jobs.
/etc/cron.deny If this file exists, users must not be listed in this file to be able to run cron jobs.

If neither configuration file exists, only the superuser may run cron jobs.

Asynchronous job processing

If you regularly turn off your computer but do not want to miss jobs, there are some solutions available (easiest to hardest):

Cronie

comes with anacron included. The project homepage says:

Cronie contains the standard UNIX daemon crond that runs specified programs at scheduled times and related tools. It is based on the original cron and has security and configuration enhancements like the ability to use pam and SELinux.

Dcron

Vanilla AUR supports asynchronous job processing. Just put it with @hourly, @daily, @weekly or @monthly with a jobname, like this:

@hourly         ID=greatest_ever_job      echo This job is very useful.

Anacron

Anacron is a full replacement for dcron which processes jobs asynchronously.

It is provided by . The configuration file is . Information on the format can be found in the man page. Running will test for validity.

Fcron

Like anacron, assumes the computer is not always running and, unlike anacron, it can schedule events at intervals shorter than a single day which may be useful for systems which suspend/hibernate regularly (such as a laptop). Like cronwhip, fcron can run jobs that should have been run during the computer’s downtime.

When replacing with fcron be aware the spool directory is and the command is used instead of crontab to edit the user crontabs. These crontabs are stored in a binary format with the text version next to them as foo.orig in the spool directory. Any scripts which manually edit user crontabs may need to be adjusted due to this difference in behavior.

A quick scriptlet which may aide in converting traditional user crontabs to fcron format:

cd /var/spool/cron && (
 for ctab in *; do
  fcrontab ${ctab} -u ${ctab}
 done
)

Варианты команд для планировщика

Конфигураций серверов множество и универсальной команды не существует. Некоторые серверы и хостинги используют разные версии PHP, что делаем составление крон задачи еще более сложным. Есть несколько команд, которые не завязаны на системное окружение и работают практически всегда:

 wget -O /dev/null -q http://ваш-домен.ru/cron.php
 curl -s http://ваш-домен.ru/cron.php > /dev/null

Следующие команды с использованием консольного PHP, следовательно путь должен быть указан согласно системного расположению файла :

 php -f /полный_путь_до_tds/cron.php
 php-cli /полный_путь_до_tds/cron.php > /dev/null

Примечание: Желательно запускать команды в консоли сервера, чтобы убедиться в их работоспособности

Как работает крон (шаг за шагом)

  1. При посещении любой страницы сайта (при любом запросе к сайту), в том числе при AJAX, REST запросах, т.е. всегда на событии срабатывает функция .

    if ( ! defined( 'DOING_CRON' ) )
    	add_action( 'init', 'wp_cron' );
  2. проверяет существует ли хоть одно задание с подошедшем временем. Если есть, то вызывает функцию .

  3. запускает крон! Отправляет не блокирующий HTTP запрос на файл крона в котором передает текущую метку времени вида: , например: .

    Тут проверяется, когда был в последний раз запущен крон, если менее 60 секунд, то функция ничего не делает. Изменить этот интервал можно через константу . Указать в константе можно максимум 600 (10 минут), если указать больше, то она будет игнорироваться. Пример:

    define( 'WP_CRON_LOCK_TIMEOUT', 60 )

    Далее проверяется есть ли хоть одно подошедшее задание, если есть то во временную опцию записывается текущая метка времени, когда был запущен крон и отправляется неблокирующий запрос на файл , там эта метка времени используется для разных проверок.

  4. Файл опять проверяет: не запускался ли недавно крон (менее 60 сек назад), есть ли подошедшие крон задания.

    Далее, проходит по всем «поспевшим» задачам и для каждого из них: удаляет текущую задачу из расписания, и если у задачи есть метка , (оно повторяющееся), создает новое такое же задание с помощью функции wp_reschedule_event(). Новое задание будет выполнено через указанный в интервале промежуток времени.

    Далее, запускается указанный при регистрации крон задачи хук-событие, т.е. запускается текущее задание:

    do_action_ref_array( $hook, $v );

    Если обращаться к файлу напрямую, то он будет отрабатывать только раз в секунд (60 секунд).

    Если в кроне много заданий и одно задание начало выполняться и выполняется так долго, что уже был отправлен очередной запрос на выполнение заданий крон, то очередная задача в первом крон запросе НЕ будет выполнена — первый запрос просто остановится после выполнения «долгой» задачи и очередные задания уже будут выполняться во втором запросе.

Заметки

Все крон задачи хранятся в опции .

Крон запрос запускается отдельно от текущей загрузки страницы и в нем отдельно грузится среда ВП и т.д. Текущий запрос (посещение страницы) только инициализирует крон (создает запрос на файл крона), если время подошло.

Другими словами: крон задачи выполняются асинхронно. Т.е. для выполнения ожидаемых крон задач, WordPress отправляет запрос на файл . Этот файл самодостаточный: он устанавливает константу , затем подгружает среду WordPress и выполняет все ожидаемые задачи.

Устранение проблем

Если появляются проблемы во время работы 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

Частные случаи

Для запуска задачи чаще, чем раз в минуту, используем sleep.

Для этого пишем в crontab:

* * *  * * /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php; /bin/sleep 30; /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php

для запуска файла каждые 30 секунд.

Иногда при использовании планировщика запуска программ cron неизвестно, сколько длится выполнение скрипта. Для избежания двойного запуска скрипта требуется проверка на завершение предыдущего запуска скрипта.

Логичным вариантом будет создание lock файла и при запуске скрипта проверять наличие файла. Но на хостинге Timeweb, как и на других хостингах, присутствует ограничение по процессору. Скрипт зависит от условий и времени выполнения, а значит, мы не можем предугадать время выполнения скрипта. Если скрипт выполнится с нарушением правил и ограничений (https://timeweb.com/ru/services/hosting/rules/), то процесс завершится со стороны хостинга. Тогда lock файл не будет удален, а значит, и скрипт не будет запускаться по крону, пока файл не будет удалён.

Маэстро из отдела инженеров рассказал, как решить задачу.

Для начала создаём sh скрипт в файл /home/c/cc123456/tmp/twtest.sh:

#!/bin/bash

command=$@

no_spaces=`echo $command | sed -e 's/\s/_/g' -e 's|/|_|g'`

pidfile=/var/tmp/$no_spaces.pid

lockfile=/var/tmp/$no_spaces.lock

if ]

then

    pid=`cat $pidfile 2>/dev/null`

    ps h $pid >/dev/null 2>/dev/null

    if ]

    then

        exit 1

    else

        rm $lockfile

    fi

fi

echo $$ > $pidfile

/usr/bin/flock -w 0 $lockfile $command

rm $pidfile

В панели управления в разделе crontab выбираем тип «Исполняемый бинарный файл».

В поле “Полный путь” пишем:

/home/c/cc123456/tmp/twtest.sh /opt/php56/bin/php /home/c/cc123456/tmp/twtest.php

Где

  • /home/c/cc123456/tmp/twtest.sh — наш скрипт проверки
  • /opt/php56/bin/php — путь до нужного интерпретатора
  • /home/c/cc123456/tmp/twtest.php — путь до нашего скрипта

Указываем необходимое время запуска и придумываем название.

Crontab: добавление задания в планировщик cron

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

Данная команда откроет файл для задач для вашего пользователя в текстовом редакторе по-умолчанию (у меня это vi, но можно изменить на удобный для вас, например nano). Настройка заданий таким способом исключает, что вы допустите ошибку в синтаксисе. Редактор crontab просто не даст сохранить файл с ошибками.

Также можно отредактировать файл заданий cron вручную через mc:

– имя файла может отличаться, в зависимости от того, под каким пользователем вы работаете.

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

Теперь добавьте расписание задания и путь к файлу скрипта:

 * * * * * /root/test.sh

Сохраните файл (редактирование файла по аналогии с редактором vim: сохранить Ctrl+O и выйти Ctrl+x).

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

* * * * * /root/test.sh

Или так:

Данный скрипт будет запускаться через cron ежеминутно.

Минимальное время – 1 минута. Демон cron просматривает список заданий один раз в минуту. Просматриваются следующие файлы и каталог:

/etc/crontab
/etc/cron.*/.
/var/spool/cron/

Каждая запись расписания crontab состоит из 5 полей:

минуты часы день_месяца месяцы день_недели
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

Можно использовать следующие допустимые значения для каждого из полей:

Поле Диапазон значений
минуты
часы
день месяца
месяц или
день недели (где 0 это воскресение) или

Знак * означает все допустимые значения. Пример задания:

15 00 * * 1 /root/test.sh

Указанный в задании скрипт, будет запускаться каждый понедельник в 00 часов 15 минут. Для упрощения синтаксиса cron-файла используют специальные символы:

Запятая (,) : запятой разбиваются значения расписания для выполнения одинаковой задачи, но в разное время. Например, если вам нужно выполнять задачу в 15 и 30 минут, вы можете задать расписание так:

15 * * * *
30 * * * *

Или исползовать более короткий синтаксис с запятой:

15,30 * * * *

Слеш (/) : использовать косую черту можно для выражения какого-либо шага. Например, вам нужно запускать какую-то задачу каждые 2 часа. В обычном написании файл cron будет громоздким, используя / вы заметно сократите содержимое cron файл:

Дефис (-) : дефис указывает диапазон значений в поле. Если вы хотите запускать задание первые 10 минут или последние 10 минут, укажите диапазон через дефис:

0-10 * * * *
50-60 * * * *

Еще несколько примеров расписаний для cron:

  • запуск по будням в 12:00 и 18:00:
  • каждые 30 минут:
  • каждую субботу:
  • каждый вторник и четверг в 2:00 ночи:

Еще в cron можно использовать специальные переменные.

Переменная Описание Эквивалент
@reboot Запускается один раз при загрузке
@yearly

или

@annually

один раз в год
@monthly один раз в месяц
@weekly один раз в неделю
@daily один раз в день
@hourly ежечасно 0 * * * *
@midnight В полночь

Т.е. для запуска задания раз в день можно использовать формат:

Можно отредактировать cron файл другого пользователя:

cron

Планировщик задач в Linux играет незаменимую роль в автоматизации администрирования операционной системы. Роль планировщика задач выполняет демон cron (crond — в некоторых дистрибутивах). Демон cron обычно запускается . После запуска, демон cron ежеминутно просматривает свои таблицы, в которых содержатся информация о периодичности запуска команд и запускает команды, когда значения полей  минута,  час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем. Основной конфигурационный файл демона cron — /etc/crontab:

cron:~#cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

В /etc/crontab задания выполняются с помощью команды run-parts, которая запускает скрипты и программы из указанных каталогов (/etc/cron.hourly, /etc/cron.daily и т.д.). Каждая строка запускает из соответствующего каталога задания ежечасно, ежедневно, еженедельно и ежемесячно, соответственно строкам сверху вниз

Обратите внимание, что все команды здесь запущены от имени пользователя root. Заметьте также, что crontab может содержать присваивания значений переменным shell, которые будут установлены перед запуском команды

Так же, если необходимо запускать какие-то команды по особому расписанию (не ежечасно, ежедневно, еженедельно и ежемесячно), то таблицы заданий помещаются в каталог /etc/cron.d/.

Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя. Для редактирования файла crontab используется специальная одноименная , позволяющая не прерывать процесс cron на время редактирования. Редактировать вручную таблицы cron не рекомендуется. Файлы таблиц планировщика cron для пользователей могут храниться в следующих каталогах:

/var/spool/cron — RedHat/var/spool/cron/crontabs — debian,ubuntu/var/spool/cron/tabs — SUSE

Каждая строка планировщика имеет следующий формат:

* * * * * {пользователь} выполняемая_команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12) (можно три буквы из названия месяца,
| | |                        регистр не имеет значения от jan до dec)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

В примере показан формат одной из строки таблицы, состоящий из 7 полей. Первые 5 полей  — это значения, задающие периодичность выполнения команды (расписание). 6-e поле присутствует только в таблицах /etc/crontab и др. расположенных в каталоге /etc/cron.d/. 7-е поле есть сама запускаемая команда. Командой может быть как простая команда, например, ls /proc >> /tmp/proc, или команда запуска написанного вами специального сценария. Со всей оставшаяся частью строки до символа перевода строки или символа %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab. Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`\’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’  будут посланы для команды на стандартный ввод.

Для указанных выше первых 5 полей, можно использовать звездочку (*), что означает все допустимые значения. Например, если поставить звёздочку в значении месяца, команда будет выполняться каждый месяц во время, указанное другими параметрами.

Дефис (-) между целыми числами обозначает диапазон чисел. Например, 1-4 означает целые числа 1, 2, 3 и 4.


Список значений, разделенных запятыми (,), обозначает перечень. Например, перечисление 3, 4, 6, 8 означает четыре указанных целых числа.

Косая черта (/) используется для определения шага значений. Если после диапазона указать /<целое_число>. Например, значение минут 0-59/2, определяет, что задание будет запущено каждую вторую минуту.

Вся оставшаяся часть строки до символа перевода строки или символа %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`\’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’  будут посланы для команды на стандартный ввод.

How to view /etc/crontab on Linux or Unix

A cronjob can be also run from /etc/crontab file. To view it run the following less command: Sample outputs:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
 
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Related

  • Tutorial

    Автор выбрал фонд Electronic Frontier Foundation для получения пожертвований в рамках программы Write for DOnations. Cloudflare — это…

  • Tutorial

    Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations. Веб-сервер Apache HTTP эволюционировал все…

  • Tutorial

    Автор выбрал Girls Who Code для получения пожертвования в рамках программы Write for DOnations. Большие двоичные объекты (BLOB) — это…

  • Tutorial
    Установка Django и настройка среды разработки в Ubuntu 20.04

    Django — бесплатная веб-структура с открытым исходным кодом, написанная на Python. Она построена на принципах масштабируемости, многократного использования элементов и быстрой разработки. Также она отличается согласованностью и слабой связанностью компонентов, за счет чего…

Отчет

У Cron существует настройка, чтобы настроить уведомления о его работе на электронную почту. Это особенно полезно, если при работе случится какая-либо ошибка. Чтобы включить такие уведомления на почту, необходимо в crontab вписать строчку:

После MAILTO= указывается необходимая почта. Указать их можно сразу несколько, перечислив через запятую. Теперь, если вдруг случится ошибка, вы будете проинформированы об этом. При чем, к вам на почту будут приходить и результаты работы скриптов. Однако, если данная функция вам мешает, ее можно и отключить, введя в конце задачи команду > /dev/null 2>&1.

В системе Linux автоматический запуск заданий выполняется демоном crond , а составлять расписания для автоматического запуска заданий могут не только администратор системы, но и пользователи.

Формат Планирования Заданий в Сrontab

время началаcron задание

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

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

Схема для лучшего понимания формата :

.---------------- минута (0 - 59)
| .-------------- час (0 - 23)
| | .------------ день месяца (1 - 31)
| | | .---------- месяц (1 - 12) ИЛИ jan,feb,mar ...
| | | | .-------- день недели (0 - 6) (Воскресенье=0 или 7) ИЛИ sun,mon,tue ...
| | | | |
* * * * * команда для выполнения

Временная метка может быть целым значением, несколькими значениями, диапазоном, дробью или дробным диапазоном.

Примеры временных меток для колонки час:

Значение Тип Описание
Целое значение Выполнять в 9am
Несколько значений Выполнять в 6, 7 и 10am
Диапазон Выполнять каждый час между 6-9 AM (включительно)
Дробь Выполнять каждый 2-ой час, т.е. 0 (полночь), 2am, 4am, 6am, и т.д.
Дробный диапазоном Выполнять каждый 3-ий час между 3am и 12pm, т.е. 3am, 6am, 9am, 12pm

Дельный Совет: Хотите стать DevOps инженером? Тогда вы обязаны знать Git! Это статья поможет реально быстро освоить основы Git! Читать далее →

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

Значение Описание Эквивалент
Выполнять при загрузке операционной системы
Выполнять ежегодно в полночь 1-го января
Выполнять ежегодно в полночь 1-го января
Выполнять ежемесячно в полночь 1-го числа
Выполнять в полночь каждый понедельник
Выполнять ежедневно в полночь
Выполнять ежедневно в полночь
Выполнять в начале каждого часа

Управление выводом задачи cron

Поскольку задачи cron выполняются в фоновом режиме, не всегда очевидно, что они были запущены успешно. Теперь, когда вы знаете, как использовать команду и как запланировать задачу cron, вы можете начать экспериментировать с различными способами перенаправления результатов выполнения задач cron, чтобы помочь вам отследить их успешное выполнение.

Если у вас есть агент передачи почты, например, Sendmail, который установлен и настроен на сервере, вы можете отправить результат выполнения задачи cron на электронный адрес, связанный с вашим профилем пользователя Linux. Также вы можете вручную задать адрес электронной почты, указав параметр вверху crontab.

Например, вы можете добавить следующие строки в файл crontab. К ним относятся оператор , за которым следует пример адреса электронной почты, директива , которая указывает оболочку для запуска (в данном примере ), директива , указывающая путь поиска бинарного файла cron, и единственная задача cron:

Эта конкретная задача будет возвращать «Run this command every minute», а этот вывод будет отправляться каждую минуту на адрес электронной почты, заданный директивой .

Также вы можете перенаправить вывод задачи cron в файл журнала или в пустую директорию, чтобы не получать электронное сообщение с выводом.

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

Скажем, что мы хотим использовать cron для запуска скрипта, но скрипт при этом должен выполняться в фоновом режиме. Для этого вы можете перенаправить вывод скрипта в пустую директорию, например , которая немедленно удаляет все данные, добавляемые в нее. Например, следующая команда cron выполняет скрипт PHP и запускает его в фоновом режиме:

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


С этим читают