Что такое Cron: как использовать планировщик задач

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

Именно для этих задач в Linux используется системный сервис cron.

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

Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.

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

Фактически, Cron — это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время.

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

Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:

  • /etc/cron.minutely — каждую минуту;
  • /etc/cron.hourly — каждый час;
  • /etc/cron.daily — каждый день;
  • /etc/cron.weekly — каждую неделю;
  • /etc/cron.monthly — каждый месяц.

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

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

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

Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается.

Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его.

Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.

Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:

crontab -e

Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию.

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

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

Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становится причиной проблем.

Синтаксис crontab

Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:

минута час день месяц день_недели /путь/к/исполняемому/файлу

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

Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле — то каждую минуту и так далее.

Ну а теперь перейдем к примерам.

Примеры настройки cron

  • Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
  • crontab -l
  • Что такое Cron: как использовать планировщик задач
  • Вы можете удалить все существующие задачи командой -r:
  • crontab -r

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример — запускать его каждую минуту:

  1. * * * * * /usr/local/bin/serve
  2. Что такое Cron: как использовать планировщик задач
  3. Далее, усложним, будем запускать каждый час, в нулевую минуту:
  4. 0 * * * * /usr/local/bin/serve
  5. Еще дальше:
  6. Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
  7. 0 0 * * * /usr/local/bin/serve
  8. Если идти так дальше, то можно запускать в первый день каждого месяца:
  9. 0 0 1 * * /usr/local/bin/serve
  10. Можно в любой день, например, 15 числа:
  11. 0 0 15 * * /usr/local/bin/serve
  12. В первый день недели первого месяца года, 0 часов 0 минут:
  13. 0 0 * 1 0 /usr/local/bin/serve
  14. Или в нулевой день недели каждого месяца:
  15. 0 0 * * 0 /usr/local/bin/serve
  16. Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
  17. 30 15 * * 2 /usr/local/bin/serve
  18. Понедельник считается первым днем, воскресенье — это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun — воскресенье:
  19. 30 15 * * sun /usr/local/bin/serve
  20. Для того чтобы указать определенный интервал нужно использовать символ «-«, например, каждый час, с семи утра до семи вечера:
  21. 0 7-19  * * * /usr/local/bin/serve
  22. Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
  23. 5,35 16  * * * /usr/local/bin/serve
  24. Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:
  25. */10 * * * * /usr/local/bin/serve
  26. Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
  • @reboot — при загрузке, только один раз;
  • @yearly, @annually — раз год;
  • @monthly — раз в месяц;
  • @weekly — раз в неделю;
  • @daily, @midnight — каждый день;
  •  @hourly — каждый час.
  • Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
  • @hourly /usr/local/bin/serve
  • Что такое Cron: как использовать планировщик задач
  • Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
  • sudo vi /etc/corn.daily/basckup

#!/bin/bash
……
Что такое Cron: как использовать планировщик задач

Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.

Отладка работы

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:

  1. Что такое Cron: как использовать планировщик задач
  2. Она должна выполняться в 19.40 каждый день, теперь смотрим лог:
  3. grep CRON /var/log/syslog
  4. Что такое Cron: как использовать планировщик задач

И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.

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

sudo run-paths /etc/cron.daily/

Что такое Cron: как использовать планировщик задач

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

Выводы

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

Читайте также:  Файл .htaccess: настройка, редирект, где находится, примеры использования

Cron: что это такое и как его правильно использовать

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

Что такое Cron и crontab?

Если в двух словах, то Cron – это планировщик задач. Если подробнее, то это утилита, позволяющая выполнять скрипты на сервере в назначенное время с заранее определенной периодичностью.

К примеру, у вас есть скрипт, который собирает какие-либо статистические данные каждый день в 6 часов вечера. Такие скрипты называют «заданиями», а их логика описывается в специальных файлах под названием сrontab.

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

В Linux-дистрибутивах с поддержкой systemd Cron считается устаревшим решением, его заменили утилитой systemd.timer. Ее предназначение и функциональность не отличается, но фактически частота использования Cron все еще выше.

Для чего обычно используют Cron?

Обычно Cron заставляют повторять вполне очевидные задачи в духе регулярного создания резервных копий данных. Но это не все.

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

С помощью Cron пользователи автоматизируют самые разные задачи, сокращая вмешательство системного администратора в работу сервера.

Базовые принципы работы с Cron и crontab (через панель управления)

Многие хостинг-провайдеры предлагают отдельное меню в панели управления для настройки расписания запланированного выполнения скриптов.

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

  • Сначала надо придумать для команды название (подойдет любой текст без спецсимволов).
  • Затем указываем исполнителя (нужно выбрать, будет ли планировщик работать с исполняемым файлом, PHP-скриптом или HTTP-запросом).
  • В графе «Путь до файла» вводим абсолютный путь до скрипта, запуск которого хотим запланировать. К примеру: /home/u/myusername/mytestscript.php. При желании можно воспользоваться встроенным файловым менеджером и выбрать заранее предзагруженный на сервер скрипт.
  • После этого указываем периодичность выполнения выбранного скрипта или исполняемого файла (в списке доступны предустановки в духе «Каждую минуту» или «Раз в день», но можно выбрать и пункт «Продвинутые настройки»).
  • Кликаем по кнопке «Создать задачу».

На этом все. Скрипт запланирован и будет регулярно повторяться.

Что такое Cron: как использовать планировщик задач

Базовые принципы работы с Cron и crontab (через SSH-протокол)

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

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

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

Чтобы запланировать задачи, используя командную строку, необходимо выполнить базовую настройку Cron, проверить, не установлены ли ограничения, и заполнить расписание задач в соответствии с синтаксисом сrontab.

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

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

Для этого существует команда crontab -e. Она автоматически генерирует таблицу в директории /var/spool/cron.

Вновь созданный файл будет пустым текстовым полем. Необходимо добавлять в него все параметры самостоятельно с нуля, опираясь на синтаксис сrontab (более подробно поговорим о нем ниже).

После ввода параметров нужно сохранить параметры редактора, нажав на клавишу F2, а затем покинуть конфигурационный файл, нажав на клавишу F10.

При введении корректных параметров в терминале отобразится строка crontab: installing new crontab.

Опытные разработчики и системные администраторы не рекомендуют использовать для редактирования расписания текстовые редакторы в духе Nano, Emacs или Vi. Команды crontab позволяют не только внести изменения в таблицу запланированных задач, но и перезапустить фоновый процесс crond, отвечающий за работу утилиты после сохранения настроек.

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

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

Первый файл находится в директории /usr/lib/cron/cron.allow и содержит в себе список учетных записей (имен пользователей), которые имеют право на планирование задач с помощью встроенных системных утилит.

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

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

Синтаксис crontab

# crontab -e SHELL=/bin/bash MAILTO=mymail@someprovider.com PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin # Детали смотрите в следующих разделах # Примеры оформления задач в планировщике (формат данных): # .—————- минуты (0 — 59) # |  .————- часы (0 — 23) # |  |  .

———- дни месяца (1 — 31) # |  |  |  .——- сами месяцы (1 — 12) OR jan,feb,mar,apr … # |  |  |  |  .

—- дни недели (0 — 6) (0 или 7 это воскресенье в зависимости от настроек системы) можно использовать сокращения типа mon,tue,wed,thu,fri,sat,sun # |  |  |  |  | # *  *  *  *  * имя пользоваться  команда, которую нужно запустить # создание копии всей операционной системы с помощью кастомного скрипта 01 01 * * * /usr/local/bin/bckp -vbd1 ; /usr/local/bin/bckp -vbd2 # установка соответствия между временем операционной системы и «железа» 03 05 * * * /sbin/hwclock —systohc # проведение обновления операционной системы в заданный период времени 25 04 1 * * /usr/bin/apt-get update

Первые три линии кода в таблице отвечают за первичную настройку. Сначала указывается оболочка, в которой будет работать Cron. У утилиты нет каких-либо предпочтений, поэтому можно указать любую на собственное усмотрение (в нашем примере это bash). Затем указывается адрес электронный почты, на который будут отправляться отчеты о работе планировщика. И напоследок указывается путь к окружению.

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

Читайте также:  Лог-файлы: что это такое и как правильно использовать и анализировать

В нашем случае указаны команды:

02 04 5 * * /usr/local/bin/bckp -vbd1 ; /usr/local/bin/bckp -vbd2
04 06 * * * /sbin/hwclock –systohc
10 05 5 * * /usr/bin/apt-get update
05 * * * * rm /home/myusername/tmp/*

Примеры использования Cron в командной строке

Команда

02 04 5 * * /usr/local/bin/bckp -vbd1 ; /usr/local/bin/bckp -vbd2

создает в таблице расписания задачу на запуск скрипта под названием bckp (представим, что такой существует), который создает резервную копию всей системы на стороннем накопителе.

Он выполняется 5 числа каждого месяца в 4 часа 2 минуты утра. Это видно по числовым значениям. Звездочки же указывают на отсутствие конкретного значения.

Cron воспринимает их как «выполнять каждый раз», то есть каждый месяц, день или неделю.

Команда

04 06 * * * /sbin/hwclock –systohc

меняет время аппаратного обеспечения на то, что используется в системе. Делает это каждый день, каждую неделю и каждый месяц в 6 часов 4 минуты утра. Как видите, здесь пропущено третье значение. Поэтому команда и запускается ежедневно, так как нет более конкретных правил.

Команда

10 05 5 * * /usr/bin/apt-get update

запускает обновление пакетов с помощью пакетного менеджера apt каждый месяц 5 числа в 05:10.

Команда

05 * * * * rm /home/myusername/tmp/*

удаляет содержимое папки с временными файлами для конкретного пользователя (меня) на пятой минуте (первый пункт) каждого часа.

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

Но первое значение указано, поэтому он будет дожидаться пятой минуты и запускаться в этот момент. То есть в 12:05, 13:05, 14:05 и т.п.

Как видите, разобраться с базовыми командами несложно.

Другие примеры настройки Cron

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

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

00 16 * * Fri rm /home/myusername/tmp/*

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

* * * * * rm /home/myusername/tmp/*

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

30 00 1 2,5,9 * * rm /home/myusername/tmp/*

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

00 16 * * 1–5 rm /home/myusername/tmp/*

Часы тоже можно делить. Например, запускать ту или иную задачу каждые 3 часа. Для этого нужно поставить слэш в графе с установкой времени по часам:

*/5 */2 * * * rm /home/myusername/tmp/*

Вместо заключения

О работе с Cron стоит знать еще пару важных вещей.

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

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

В-третьих, информацию о работе Cron можно собирать в отдельный файл с помощью команд в духе:

30 18 * * * rm /home/myusername/tmp/* > /home/myusername/cronlogs/clean_tmp_dir.log

На этом все. Следуйте инструкциям, не путайте порядок параметров и внимательно изучайте журнал ошибок, если что-то пойдет не так. После недолгой практики вы поймете, что работать с Cron не так уж и сложно!

Блог Cronbox

07.05.2020.

Время чтения — 3 мин.

Cron — это программа, которая выполняет задания в рамках указанного расписания. Такой класс программ обычно называют планировщиками задач.

В качестве задач выступают команды из оболочки операционной системы.

Основные возможности:

  • Запускать задачи в указанные даты и время.
  • Запускать задачи с интервалом — например, раз в 5 минут.

Файловая структура

Cron поддерживает множественные места хранения расписаний. Это сделано для того, чтобы:

  1. Каждый пользователь мог работать только со своими задачами.
  2. Разделить выполнение задач тематически. Например, если положить скрипт в каталог /etc/cron.daily, он выполнится 1 раз в сутки.

Главный файл с расписаниями — /etc/crontab.

Тематические каталоги:

  • /etc/cron.hourly/* — сценарии, выполняющиеся каждый час.
  • /etc/cron.daily/* — сценарии, выполняющиеся каждый день.
  • /etc/cron.weekly/* — сценарии, выполняющиеся каждую неделю.
  • /etc/cron.monthly/* — сценарии, выполняющиеся каждый месяц.

В тематические каталоги помещаются готовые скрипты, расписание для скриптов не указывается. Если создать скрипт в каталоге /etc/cron.hourly, то он будет запускаться 1 раз в час.

Если нужно сохранить расписание в отдельном файле, то можно поместить его в каталог /etc/cron.d.

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

Существует 2 формата записи:

  • с указанием имени пользователя — используется только для файла crontab, например, вот так:
  • без указания — используется для всех остальных случаев.

Если значение поля не важно, то достаточно указать знак «*» (звёздочка). В таком случае cron использует предоставленные значения.
Но что будет, если указать для всех временных полей «*»? Cron вызовет команду раз в минуту.

В главном конфигурационном файле /etc/crontab добавлены подсказки в виде комментариев:

# ┌───────────── minute (0 — 59)
# │ ┌───────────── hour (0 — 23)
# │ │ ┌───────────── day of the month (1 — 31)
# │ │ │ ┌───────────── month (1 — 12)
# │ │ │ │ ┌───────────── day of the week (0 — 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command to execute

Примеры интервалов

  • Запускать скрипт для резервного копирования каждый вечер в 23:00 от пользователя backup:
    0 23 * * * backup /scripts/backup.sh
  • Запускать скрипт каждые 15 минут:
    */15 * * * * backup /scripts/fetch.sh
  • Запускать скрипт только в выходные дни:
    */15 * * * 6-7 backup /scripts/fetch.sh
  • Запускать скрипт в 5 утра, 1-го числа января и февраля:
    5 4 1 1-2 * backup /scripts/fetch.sh

Работа с задачами

Для примера запустим скрипт резервного копирования /home/eugene/scripts/backup.sh каждый день в 23:00.

Как добавить задачу (способ № 1)

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

crontab -e

и добавляем строчку:

0 23 * * * /home/eugene/scripts/backup.sh

В таком случае имя пользователя указывать не нужно.

Как добавить задачу (способ № 2)

Второй способ — создать файл с расписанием в каталог /etc/cron.d — например, /etc/cron.d/site-backup:

0 23 * * * eugene /home/eugene/scripts/backup.sh

Применяем настройки

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

service crond restart

Как удалить задачу

Это можно сделать как минимум тремя способами:

  1. Удалить файл с заданием.
  2. Удалить строчку из файла.
  3. Закомментировать строчку.#0 23 * * * backup /scripts/backup.sh

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

service crond restart

Полезные ссылки

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

Предыдущая версия данного обучающего руководства была написана Шоном Льюисом.

Введение

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

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

Читайте также:  Что такое PuTTY: правильная настройка, примеры использовния

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

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

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

Установка cron

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

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

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

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

  • sudo systemctl enable 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, выглядят следующим образом:

Планирование задач с помощью Cron

Cron используются для планирования задач, которые должны выполняться на сервере. Они чаще всего используются для автоматизации обслуживания или администрирования системы. Однако, они также имеют отношение к разработке веб-приложений. Существует много ситуаций, когда веб-приложению может потребоваться запускать определенные задачи периодически. Сегодня мы рассмотрим основы cron.

Определения

Сначала давайте ознакомиться с определениями, относящимися к этой теме.

«Cron» — это основанный на времени планировщик заданий в Unix-подобных операционных системах (Linux, FreeBSD, Mac OS и т.д…). И эти задания или задачи называются «Cron Jobs».

На этих системах работает «демон» cron. Демон — это программа, которая работает в фоновом режиме все время, обычно инициированная системой. Этот демон cron отвечает за запуск заданий cron по расписанию.

Расписание находится в файле конфигурации с именем «crontab». Вот где перечислены все задачи и время их запуска.

Зачем Использовать Cron?

Системные администраторы уже давно используют cron. Но так как целевая аудитория этой статьи веб-разработчики, давайте рассмотрим несколько примеров использования cron, которые актуальны в этой области:

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

Синтаксис

Вот простое задание cron:

10 * * * * /usr/bin/php /www/virtual/username/cron.php > /dev/null 2>&1

Есть две основные части:

  1. Первая часть это «10 * * * *». Здесь мы устанавливаем таймер расписания.
  2. Остальная часть строки — это команда, которая будет выполняться из командной строки.

Сама команда в этом примере состоит из трех частей:

  1. «/usr/bin/php». PHP-скрипты обычно не исполняются сами по себе. Поэтому нам нужно запустить его через интерпретатор PHP.
  2. «/www/virtual/username/cron.php». Это просто путь к скрипту.
  3. «> /dev/null 2>&1». Эта часть обрабатывает вывод скрипта. Подробнее об этом позже.

Синтаксис тайминга

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

Она состоит из пяти частей:

  1. минуты
  2. часы
  3. день месяца
  4. месяц
  5. день недели

Вот иллюстрация:

Звездочка

Довольно часто вы видите звездочку (*) вместо числа. Это означает все возможные числа для этой позиции. Например, звездочка в минутной позиции заставит запускать задачу каждую минуту.

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

Примеры:

Это задание cron будет выполняться каждую минуту, все время:

* * * * * [command]

Это задание cron будет выполняться в ноль минут, каждый час (т.е. почасовое задание cron):

0 * * * * [command]

Это также часовое задание cron, но вместо этого выполняется в 15 минуту каждого часа (например, 00:15, 01:15, 02:15 и т.д.):

15 * * * * [command]

Это задание будет срабатывать один раз в день, в 2:30:

30 2 * * * [command]

Это задание будет выполняться один раз в месяц, во второй день месяца в полночь (т.е. 2 января в 00:00, 2 февраля в 00:00 и т.д.):

0 0 2 * * [command]

Это будет работать по понедельникам каждый час (т.е. 24 раза за один день, но только по понедельникам):

0 * * * 1 [command]

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

0,10,20 * * * * [command]

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

*/5 * * * * [command]

Для указания диапазона можно использовать тире. Это будет выполняться один раз в час с 5:00 до 10:00:

0 5-10 * * * [command]

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

@reboot [command]

Настройка и управление заданиями Cron

Существует несколько различных способов создания и управления вашими заданиями cron.

Панели управления

Многие хостинговые компании предоставляют панели управления для своих клиентов. Если вы один из них, вы можете найти раздел в своей панели управления для управления вашими заданиями cron.

Редактирование crontab

Запуск этой команды запустит vi (текстовый редактор) и позволит вам редактировать содержимое crontab:

crontab -e

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

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

crontab -l

Удаление содержимого crontab:

crontab -r

Загрузка файла

Все задания cron можно записать в файл, а затем поместить в crontab:

crontab cron.txt

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

Ссылка на основную публикацию