Перейти к содержимому

Sudo crontab e что это

  • автор:

cron

cron – программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени. Для редактирования заданий используется утилита crontab .

Листинг

Нельзя изменять файл расписания, просто открыв его в текстовом редакторе. Для его редактирования необходимо использовать команду crontab -e .

Простой пример файла расписания. Создание снимка экрана каждый час:

SHELL=/bin/bash MAILTO=username 0 * * * * scrot

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

Выбор среды для исполняемых задач:

SHELL=/bin/bash

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

MAILTO=username

Вместо имени, также можно использовать электронный адрес:

MAILTO=example@example.org

Не обязательные настройки

Задаем каталог пользователя:

HOME=

Задаем каталоги исполняемых фалов:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

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

DISPLAY=:0.0

Выбор времени выполнения задания

Время запуска представляется в таком виде:

минута час день_месяца месяц день_недели команда
Значение Диапазон Дополнительно
минуты 0-59
часы 0-23
дни месяца 1-31
месяцы 1-12 можно задавать и в 3-х буквенном варианте
дни недели 0-6 можно задавать и в 3-х буквенном варианте (0=воскресенье)

Символ ‘*’ подразумевает — любое значение.

Минимальное время 1-а минута. Это связано с тем что cron каждую минуту просматривает список заданий, и ищет которые нужно выполнить.

Дни недели и месяца в трех буквенном варианте:
sun mon tue wed thu fri sat
jan feb mar apr may jun jul aug sep oct nov dec

Дополнительные переменные cron

Переменная Описание Эквивалент
@reboot Запуск при загрузке
@yearly Раз в год 0 0 1 1 *
@annually Тоже что и @yearly
@monthly Раз в месяц 0 0 1 * *
@weekly Раз в неделю 0 0 * * 0
@daily Раз в день 0 0 * * *
@midnight В полночь (00:00)
@hourly Каждый час 0 * * * *

Управление при помощи crontab

Добавление файла расписания:

crontab имя_файла_расписания

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

crontab -l

Удаление текущего файла расписания:

crontab -r

Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов):

crontab -e

Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя:

crontab -u username

Учтите, что -u можно воспользоваться только запуская crontab от лица суперпользователя.

Примеры

Каждый час, с использованием переменных cron:

@hourly ~/script.sh

Каждый день в 03:15 запускать скрипт:

15 3 * * * ~/script.sh
0 0 * * 1

Каждый четный час:

Тоже что и выше, но расписанное полностью:

* 0,2,4,6,8,10,12,14,16,18,20,22 * * *

Каждые 10 минут:

:-D

Новый год :

59 23 31 dec *

Каждый будний день в 22:00:

0 22 * * 1-5

Запуск программы с графической оболочкой ( GUI ); каждую минуту будет отображаться сообщение с текстом «It work!»:

0-59 * * * * DISPLAY=:0 gdialog --msgbox "It work\!" 25 20 > /dev/null

* где DISPLAY=:0 — номер монитора

GUI версии

GTK+

Есть очень полезная программа: Scheduled tasks(gnome-schedule). Она представляет собой графический интерфейс для cron, и будет полезна новичкам, так как понятным языком описывает время выполнения задачи. К примеру:

каждый час в 15 минут;

каждую минуту, между 00:00 и 00:59.

KDE

Для KDE существует Task Scheduler, который встраивается в окно настройки системы.

Настройка планировщика Cron в Linux

Консультация по продукту 1cloud

Cron — это планировщик задач, используемый для выполнения задач (в фоновом режиме) в указанное время. Crontab — команда, которая используется, для управления планировщиком Cron. Команда crontab создает файл crontab, содержащий команды и инструкции для запуска демона cron.

Конфигурационные файлы

  • /etc/cron.allow — если существует, пользователи указанные в этом файле имеют возможность запуска заданий планировщика;
  • /etc/cron.deny — если существует, пользователи указанные в этом файле НЕ имеют возможность запуска заданий планировщика.

Если cron.allow существует, только юзерам, перечисленным в нем, разрешено использовать cron, при этом файл cron.deny игнорируется. Если cron.allow не существует, юзерам, указанным в cron.deny, не разрешается использовать планировщик cron.

Формат записей в обоих файлах — одно имя пользователя в каждой строке. Пробелы не разрешены.

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

Параметры команды Crontab

crontab -e Редактирование или создание файла расписания для текущего пользователя
crontab -l Вывод содержимого расписания текущего пользователя
crontab -r Удаление файла расписания текущего пользователя
crontab -u user Работа с расписаниями конкретных пользователей. Доступно только суперпользователю

Каждая запись в crontab состоит из шести полей, указываемых в следующем порядке:

minute(s) hour(s) day(s) month(s) weekday(s) command(s)

Поля разделяются пробелами или знаками табуляции. Первые пять представляют собой числовые значения, а шестое — это команда, которая будет выполняться. В следующей таблице кратко описывается каждое из полей:

Поле Диапазон значений Описание
minute 0-59 Минута запуска команды
hour 0-23 Час запуска
day 1-31 Число (день) запуска
month 1-12 Месяц запуска
weekday 0 — 6 День недели запуска (воскресенье = 0, понедельник = 1, вторник = 2 и т.д.)
command Последовательность команд для выполнения. Это могут быть команды, исполняемые файлы (например, скрипты) или комбинации файлов.

Примечание: значение первых пяти полей может быть либо * (звездочкой), что означает все допустимые значения, либо списком элементов, разделенных запятыми. Элемент является либо числовым, либо диапазоном чисел, обозначенным двумя значениями, разделенными тире (например, 10-12).

Примеры использования

Запуск скрипта каждый понедельник в 9:00 и 18:00 часов:

0 9,18 * * 1 /home/ivan/script.sh

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

30 */12 * * * script.sh

Запуск команды каждый месяц 1 числа в 12:00:

0 12 1 * * command

Запуск скрипта в полночь с понедельника по пятницу:

0 0 * * 1-5 /home/ivan/script.sh

Тестирование сервера

P. S. Другие инструкции:

  • Как изменить пароль администратора в Linux
  • Запуск команд в фоновом режиме
  • Настройка Linux-файрвола iptables: Руководство для начинающих
  • Переименование сетевых интерфейсов при помощи udev-правил
  • Файловые менеджеры для ОС Linux

Ознакомиться с другими инструкциями вы можете на нашем сайте. А чтобы попробовать услугу — кликните на кнопку ниже.

Поделиться в соцсетях:

Средняя оценка: 5,0, всего оценок: 11 Спасибо за Вашу оценку! К сожалению, проголосовать не получилось. Попробуйте позже

Cron

Cron — популярный инструмент в Unix-системах, который помогает запланировать исполнение различных заданий прямо в ОС. Операции будут совершаться в обозначенные дату и время, с указанной пользователем периодичностью. Такие отложенные процессы также называют cron jobs. Этот инструмент подходит для решения многих задач: отслеживания свободного дискового пространства, регулярного резервного копирования, удаления ненужных файлов (логов) и т.д.

«IT-специалист с нуля» наш лучший курс для старта в IT

Что такое cron и файлы crontab

Коротко cron можно описать как планировщик задач. Он способен в обозначенное время с определенной периодичностью выполнять скрипты на сервере. Например, разработчику нужно собирать статистику каждые 3 дня в 18:00. Для этого он создает «задание», логику которого описывает в файле crontab.

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

Cron является встроенной утилитой и доступен в каждом дистрибутиве Linux. Обратите внимание, он считается устаревшим в операционных системах с поддержкой systemd. В таких дистрибутивах Linux его заменили на systemd.timer. Предназначение этой утилиты полностью совпадает с cron. При этом популярность «устаревшего» планировщика все еще выше благодаря простоте использования.

Профессия / 8 месяцев
IT-специалист с нуля

Попробуйте 9 профессий за 2 месяца и выберите подходящую вам

vsrat_7 1 (1)

Когда применяется cron

Как правило, от cron в операционных системах на основе Linux требуют выполнения очевидных задач, например бэкапов сайтов, баз данных и пр. Однако сфера применения этого инструмента гораздо шире.

  1. Пользователи могут с помощью планировщика запускать скрипты для корректировки системного времени. Эта операция нужна, потому что время ОС и аппаратного обеспечения может различаться (это нужно исправлять). Если для программной настройки обычно используется Network Time Protocol, то корректировку для «железа» может регулярно выполнять cron.
  2. Один из распространенных сценариев использования планировщика — создание оповещений, которые демонстрируются пользователю каждое утро. В этих сообщениях может содержаться информация о состоянии компьютера или любые другие полезные данные. Например, утилита может присылать администратору электронные письма с отчетом о работе сайта за последние сутки.
  3. Некоторые сервисы могут использовать cron даже без ведома владельца компьютера. Среди примеров можно назвать Rootkit Hunter, Logwatch и Logrotate. Большинство повторяющихся задач они настраивают, используя эту утилиту.

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

Основные принципы работы с cron и crontab через SSH-протокол

В тех случаях, когда хостинг-провайдер не предоставляет пользователю функциональных веб-интерфейсов для управления сервером, для работы с cron приходится использовать командную строку. Для подключения к серверу понадобится протокол Secure Shell.

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

  • crontab -e — открытие файла конфигураций (настроек);
  • crontab -l — демонстрация списка, то есть всех запланированных операций для конкретного пользователя;
  • crontab -r — полное удаление файла настроек и всех задач текущего пользователя;
  • crontab -v — информация о последнем открытии файла конфигураций;
  • man crontab — позволяет узнать подробную информацию.

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

Первичная настройка cron

В своей работе планировщик задач использует информацию из таблиц crontab. Как отмечалось ранее, каждый пользователь на сервере вне зависимости от прав (в том числе root) должен иметь свой индивидуальный файл crontab. По умолчанию в системе их нет, поэтому они создаются вручную.

Чтобы создать таблицу, нужно ввести команду crontab -e. После этого в директории /var/spool/cron автоматически появится нужный файл.

Если команда crontab -e выполняется впервые, система предложит определить, какой редактор будет использоваться. На выбор может быть предложено несколько вариантов, из которых /bin/nano будет самым простым, также пользователь может увидеть /usr/bin/vim.basic и другие. Каждый вариант будет пронумерован. Чтобы выбрать, нужно нажать соответствующую цифру.

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

crontab: installing new crontab

За работу планировщика задач после сохранения настроек в Linux отвечает фоновый процесс crond.

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

Для создания заданий в cron используется специальный формат строк в таблице-расписании. В каждой из них содержится определенная информация:

  • параметры для запуска нужной задачи (дата, время);
  • сама команда для выполнения операции.

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

Станьте разработчиком на Python и решайте самые разные задачи: от написания кода до автоматизации процессов

Синтаксис crontab

Сначала нужно ввести команду crontab -e. Код в первых трех линиях таблицы нужен для настройки первичных параметров таблицы. Сначала необходимо выбрать оболочку для работы утилиты. У cron нет рекомендаций по оптимальному варианту — планировщик будет стабильно работать в любой оболочке. Если пользователь хочет получать отчеты о работе cron, нужно указать email, куда их отправлять. Третьей строкой прописывается путь к окружению.

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

  1. Минуты (допустимы параметры от 0 до 59).
  2. Часы (можно ввести значения от 0 до 23).
  3. Дата (от 1 до 31).
  4. Месяц (порядковый номер от 1 до 12).
  5. Дни недели. Отсчет начинается с воскресенья, которое обозначается как 0, суббота, соответственно, 6. Также доступны варианты с сокращениями SUN, MON и т.п.

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

Шаблон для создания Cron, можно задать интервал исполнения от минут до месяца

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

Стандартная запись будет выглядеть так:

20 07 * * * /home/admin/backup

Она означает, что cron ежедневно будет запускать команду /home/admin/backup утром в 7 часов 20 минут.

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

  • Запятые — для создания перечней. Можно прописать в поле «часы» значение 5,10,19, в этом случае указанная команда в течение суток будет запускаться трижды — в 5, 10 и 19 часов.
  • Слэши — для создания цикличности. Запуск команды можно описать с помощью временных промежутков без привязки к конкретному времени. Например, ввести */20 в поле «минуты», тогда скрипт будет срабатывать каждые 20 минут.
  • Тире — для обозначения промежутка. Можно ввести в поле «дни недели» параметры «0-3», чтобы скрипт срабатывал с воскресенья по среду, а в остальные дни не запускался.

Важно учитывать, что запуск команд привязан к серверному времени и к часовому поясу (timezone). Чтобы узнать второй параметр, можно обратиться к службе поддержки хостинга или ввести команду date в командную строку.

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

  • @reboot — команда выполнится один раз при перезагрузке системы;
  • @yearly — задание будет выполняться один раз в год;
  • @annually — вариация команды @yearly, делает то же самое, но в Новый год;
  • @monthly — ежемесячное выполнение задания;
  • @weekly — скрипт будет срабатывать раз в неделю;
  • @daily — ежедневное выполнение;
  • @midnight — срабатывание раз в день в полночь;
  • @hourly — скрипт выполняется ежечасно.

Записи с готовыми командами выглядят следующим образом:

Какие команды можно задавать в Cron через командную строку

Приведем примеры, как могут выглядеть команды в файле crontab для выполнения различных заданий.

Команда №1

03 07 10 * * /usr/local/bin/backup -vbd1 ; /usr/local/bin/backup -vbd2

Такая команда создаст в расписании задание на запуск процесса backup (его нужно будет сначала создать), который будет проводить резервное копирование на сторонний накопитель всех системных файлов. Скрипт будет запускаться в 7 часов 3 минуты 10 числа. Оставшиеся поля со звездочками показывают, что у задачи нет конкретных значений месяца и дня недели, значит, бэкап будет выполняться ежемесячно.

Команда №2

32 12 * * * /sbin/hwclock —systohc

Эта задача заставляет приводить к единому значению время в операционной системе и аппаратном обеспечении. Происходить данный процесс будет ежедневно в 12 часов 32 минуты. Здесь не указана дата, поэтому cron воспринимает задание как подлежащее к исполнению ежедневно.

Команда №3

15 03 21 * * /usr/bin/apt-get update

Эта задача обновит пакеты через пакетный менеджер apt. Выполняться эта операция будет ежемесячно 21 числа в 03:15.

Ограничения Cron

Планировщик cron позволяет установить ограничения на его использование. Чтобы задать их, существуют специальные файлы cron.deny и cron.allow.

Cron.deny располагается в /usr/lib/cron/cron.deny. Этот файл содержит названия учетных записей, которым запрещено пользоваться планировщиком. Они не могут создать свой crontab и задания в нем.

Cron.allow располагается в /usr/lib/cron/cron.allow. В файле находится перечень имен пользователей, которым разрешено планировать задачи с использованием данной системной утилиты.

Когда в системе нет cron.allow, то не существует никаких ограничений на планирование задач — все пользователи по умолчанию могут пользоваться возможностями Cron, если имен их учетных записей нет в файле cron.deny.

Основные принципы работы с планировщиком через панель управления

В меню панелей управления сервером многие хостинг-провайдеры предусматривают отдельное меню, которое позволяет пользоваться возможностями Cron. Например, в панели управления Timeweb для создания задачи требуется зайти в раздел Crontab. В интерфейсе он расположен сбоку слева. В открывшемся меню нужно нажать на кнопку «Добавить новую задачу» и ввести ее параметры. Разберемся, что именно нужно учитывать при создании повторяющегося задания.

Так выглядит создание задания Cron в панели управления хостингом

  • Задаче нужно дать название, в котором не будут использоваться спецсимволы. Подойдет любой текст, но желательно описать, что именно в этом случае будет делать cron, чтобы в дальнейшем не запутаться.
  • Следует обозначить исполнителя задачи. Это значит, пользователь указывает, с чем будет работать планировщик (HTTP-запросом, PHP-скриптом или файлом).
  • Затем заполняется графа «Путь до файла». Здесь должен быть путь до того скрипта, который будет регулярно запускаться с помощью cron. Например, это может выглядеть так: /home/usr/someusername/thescriptfortest.php. Панели управления также предлагают воспользоваться встроенным файловым менеджером, чтобы упростить работу.
  • На финальном этапе настройки указывается, с какой периодичностью будет исполняться задача. Панель управления предлагает несколько вариантов по умолчанию в стиле «Раз в день», но пользователь может выбрать вариант «Продвинутые настройки» и задать параметры вручную. После этого останется нажать «Создать задачу».

Работа с планировщиком через панель управления легче: пользователю не нужно запоминать синтаксис crontab, вероятность ошибки очень мала. Предлагаем посмотреть, как Cron выглядит в интерфейсе ISPmanager.

Создание Cron в ISPmanager

Синтаксис crontab-генераторов

Добавление заданий можно сильно упростить, если использовать специальные веб-инструменты. Они позволяют не изучать синтаксис, потому что обладают графическим интерфейсом: достаточно ввести нужные параметры, а задания будут создаваться сами. Затем сайт генератора выдаст код, который можно скопировать и вставить в crontab.

Crontab.guru

Сайт, который позволяет быстро изучить разные варианты заданий для Cron. Просто введите данные, и сайт самостоятельно сгенерирует конечное задание. Этот веб-ресурс также предлагает подсказки и примеры стандартных задач для планировщика.

Crontab.guru — Здесь можно cгенерировать задание Cron

Crontag Generator

Второй ресурс для генерации кода, который потом можно использовать в crontab-файле. Принцип работы такой же, как у предыдущего сайта: пользователь вводит данные, проставляет флажки в чекбоксы и в итоге нажимает кнопку Generate Crontab Line.

Crontag Generator — еще один ресурс для создания Cron заданий

IT-специалист с нуля

Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.

Использование Cron для автоматизации задач в Ubuntu 18.04

Использование Cron для автоматизации задач в Ubuntu 18.04

Cron — это хронологический демон-планировщик задач, работающий в операционных системах типа Unix, включая дистрибутивы Linux. Cron запускается в фоновом режиме, а задачи, запланированные в cron и именуемые «задачи cron», выполняются автоматически, что делает cron полезным для автоматизации связанных с обслуживанием задач.

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

Предварительные требования

Для выполнения этого обучающего руководства вам потребуется доступ к компьютеру с Ubuntu 18.04. Это может быть ваш локальный компьютер, виртуальная машина или виртуальный приватный сервер.

Независимо от того, какой компьютер вы используете для выполнения этого обучающего руководства, у вас должен быть пользователь без привилегий root с настроенными правами администратора. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 18.04.

Установка cron

Почти все дистрибутивы Linux имеют ту или иную форму cron, установленную по умолчанию. Но если вы используете компьютер Ubuntu, где cron не установлен, вы можете установить его с помощью APT.

Перед установкой cron на компьютер Ubuntu обновите локальный индекс пакетов компьютера:

Затем выполните установку cron с помощью следующей команды:

Вам также нужно убедиться, что он настроен для работы в фоновом режиме:

Output
Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable cron

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

Как работает Cron

Задачи в cron записываются и управляются в специальном файле crontab . Каждый профиль пользователя в системе может иметь собственный файл crontab, где составляются расписания задач, которые хранятся в /var/spool/cron/crontabs/ .

Чтобы запланировать задачу, вам нужно открыть ваш файл crontab для редактирования и добавления задачи, написанной в форме выражения cron. Синтаксис выражений cron можно разбить на два элемента: расписание и команда для запуска.

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

Поле Допустимые значения
минута 0–59
час 0–23
День месяца 1–31
месяц 1–12 или ЯНВ–ДЕК
День недели 0–6 или ПНД–ВСК

Все вместе задачи, запланированные в crontab, выглядят следующим образом:

minute hour day_of_month month day_of_week command_to_run 

Ниже представлен функциональный пример выражения cron. Это выражение запускает команду curl http://www.google.com каждый вторник в 17:30:

30 17 * * 2 curl http://www.google.com 

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

  • * : в выражениях cron звездочка (*) служит подстановочным символом, который представляет все значения. Таким образом, задача, запланированная в форме * * * * * . , будет запускаться каждую минуту, каждый час, каждый день каждого месяца.
  • , : запятые разбивают значения расписания для получения списка. Если вы хотите запускать задачу в начале и середине каждого часа, а не выполнять две отдельные задачи (например, 0 * * * * . и 30 * * * * . ), вы можете добиться той же функциональности с помощью одного выражения ( 0,30 * * * * . ).
  • — : дефис представляет диапазон значений в поле расписания. Вместо создания 30 отдельных запланированных задач для команды, которую вы хотите запускать первые 30 минут каждого часа (например, 0 * * * * . , 1 * * * * . , 2 * * * * . и т. д.), вы можете просто запланировать его следующим образом: 0-29 * * * * . .
  • / : вы можете использовать косую черту со звездочкой для выражения значения шага. Например, вместо написания восьми отдельных задач cron для запуска команды каждые три часа (например, 0 0 * * * . , 0 3 * * * . , 0 6 * * * . и т. д.), вы можете задать расписание для запуска следующим образом: 0 */3 * * * . .

Примечание. Вы не можете выражать значения шага произвольно, допускается использование только целых чисел, которые равномерно делят диапазон, допустимый для данного поля. Например, в поле «часы» вы можете указать после косой черты только 1 , 2 , 3 , 4 , 6 , 8 или 12 .

Ниже представлено несколько примеров использования компонента расписания cron:

  • * * * * * — запускать команду каждую минуту.
  • 12 * * * * — запускать команду 12 минут в начале каждого часа.
  • 0,15,30,45 * * * * — запускать команду каждые 15 минут.
  • */15 * * * * — запускать команду каждые 15 минут.
  • 0 4 * * * — запускать команду каждый день в 4:00.
  • 0 4 * * 2-4 — запускать команду каждый вторник, среду и четверг в 4:00.
  • 20,40 */8 * 7-12 * — запускать команду в 20-ю и 40-ю минуту каждого 8-го часа каждый день последних 6 месяцев года.

Если вы найдете что-то из этого затруднительным или вам потребуется помощь при написании расписания для ваших собственных задач cron, Cronitor предоставляет удобный редактор выражений cron, который называется Crontab Guru и который вы можете использовать для проверки действительности ваших расписаний cron.

Управление файлами crontab

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

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

Вы можете изменить файл crontab с помощью следующей команды:

Если вы впервые запускаете команду crontab в этом профиле пользователя, вы сможете выбрать используемый по умолчанию текстовый редактор для использования при редактировании crontab:

Output
no crontab for sammy - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano

Введите число, соответствующее нужному вам редактору. Кроме того, вы можете просто нажать ENTER , чтобы использовать вариант по умолчанию, nano .

После выбора вы попадете в новый файл crontab, содержащий ряд закомментированных инструкций по его использованию:

# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 

При запуске crontab -e в следующий раз, ваш файл будет автоматически открываться в этом текстовом редакторе. После входа в редактор вы можете ввести свое расписание для каждой задачи в новой строке. В противном случае вы можете сохранить изменения и закрыть файл crontab ( CTRL + X , Y , а затем ENTER , если вы выбрали nano ).

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

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

Вы можете стереть файл crontab с помощью следующей команды:

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

Эта команда удаляет файл crontab пользователя немедленно. Однако вы можете включить флаг -i , чтобы добавить в команду подтверждение того, что вы действительно хотите удалить пользовательский файл crontab:

Output
crontab: really delete sammy's crontab? (y/n)

После получения запроса вы должны ввести y , чтобы удалить файл crontab, или n , чтобы отменить удаление.

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

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

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

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

. . . MAILTO="example@digitalocean.com" SHELL=/bin/bash HOME=/ * * * * * echo ‘Run this command every minute’ 

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

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

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

* * * * * echo ‘Run this command every minute’ >> /directory/path/file.log 

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

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1 

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

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

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

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

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

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

Однако, если cron.deny существует, и user добавлен в него, но не указан в файле cron.allow , вы получите следующую ошибку после запуска предыдущей команды:

Output
The user user cannot use this program (crontab)

По умолчанию большинство демонов cron полагает, что все пользователи имеют доступ к cron, если только не существует cron.allow или cron.deny .

Специальный синтаксис

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

Сокращение Краткая запись для
@hourly 0 * * * *
@daily 0 0 * * *
@weekly 0 0 * * 0
@monthly 0 0 1 * *
@yearly 0 0 1 1 *

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

Кроме того, краткая запись @reboot будет запускать любую команду, которая следует за ней при каждом запуске сервера:

@reboot echo "System start up" 

Использование этих комбинаций при возможности поможет понимать расписание задач в вашем файле crontab.

Заключение

Cron — это гибкая и мощная утилита, которая позволяет снизить количество ресурсов, затрачиваемых на администрирование системы. Используя cron вместе со скриптами оболочки, вы можете автоматизировать задачи, которые обычно вызывают затруднения. Например, вы можете написать скрипт оболочки для отправки резервных копий данных решению хранилища объектов и затем автоматизировать его с помощью cron.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

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

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