Что за программа cron

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

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

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

Фактически, Cron — это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:

Разбираемся с CRON | Теория | Практика | UnixHost

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

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

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

Настройка Cron

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

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

Запуск задач по расписанию linux. Cron и его маленький секрет

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

Синтаксис crontab

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

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

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

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

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

Вы можете удалить все существующие задачи командой -r:

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

Читайте также:
Теги что за программа на Андроид

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

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

0 0 * * * /usr/local/bin/serve

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

0 0 1 * * /usr/local/bin/serve

Можно в любой день, например, 15 числа:

0 0 15 * * /usr/local/bin/serve

В первый день недели первого месяца года, 0 часов 0 минут:

0 0 * 1 0 /usr/local/bin/serve

Или в нулевой день недели каждого месяца:

0 0 * * 0 /usr/local/bin/serve

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

30 15 * * 2 /usr/local/bin/serve

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

30 15 * * sun /usr/local/bin/serve

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

0 7-19 * * * /usr/local/bin/serve

Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

5,35 16 * * * /usr/local/bin/serve

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:

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

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

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

sudo vi /etc/corn.daily/backup

#!/bin/bash
.

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

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

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

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

grep CRON /var/log/syslog

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

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

sudo run-paths /etc/cron.daily/

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

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник: losst.pro

Планировщик Cron: чем полезен и как использовать в веб-разработке

Cron — программа-демон в операционных системах семейства UNIX. Она умеет выполнять задания на сервере с заданной периодичностью. Благодаря Сron веб-разработчик может упростить себе работу и автоматизировать почти любые задачи: от стандартного бэкапирования до более сложных. Я с помощью Сron проверял и убирал битые ссылки на сайте радиостанций. Немного расскажу об этом опыте, а прежде — о том, как настроить Сron вручную через консоль или в панели ISPmanager, если вы не хотите хлопот с командной строкой.

Настройка Cron вручную в консоли

  • crontab -l выводит на экран содержимое текущего файла расписания активного пользователя — того, кто в данный момент авторизован в системе;
  • crontab -r удаляет текущий файл расписания;
  • crontab – e выводит на экран содержимого текущего файла расписания для редактирования.

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

Структура одной строки crontab-файла выглядит следующим образом:

Структура одной строки crontab-файла

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

В первых пяти параметрах задаётся время выполнения команды или сценария: минута, час, день, месяц, день недели. Допускается ввод этих значений в виде:

  • числа;
  • списка чисел, разделённых запятыми;
  • диапазона чисел, разделённого дефисом;
  • символы * или /. Знак * означает, что задание выполняться каждый раз в указанный период. Например, такое задание: * * * * * [команда для выполнения] будет выполняться каждую минуту. Чтобы настроить периодичность, например, каждые десять минут, нужно добавить к этой записи знак / и указать число: */10 * * * * [команда для выполнения] — запуск задания каждые 10 минут.

Время и дата для выполнения берётся относительно времени и даты, установленными на сервере, где выполняется задание Cron.

Читайте также:
Opera installer что это за программа

Шестым параметром задаётся команда для выполнения.

Для ручного создания команд Cron существуют сервисы crontab-генераторов. Они упрощают жизнь начинающим пользователям:

  • crontab.guru — хороший ресурс для тех, кто ещё мало знаком с планировщиком. Здесь можно изучать синтаксис команд и примеры cron-задач.
  • crontab-generator.org— генератор команд. Достаточно ввести нужные данные в форму, и сайт сгенерирует команду для планировщика. Её можно вставить в crontab-файл, открыв её командной crontab -e, либо сохранить в файл или вообще отправить на e-mail.

Если же вы пользуетесь ISPmanager, вводить команды в crontab вовсе не нужно — их можно задать через форму прямо в панели. Расскажу об этом способе работы с Cron.

Несколько примеров использования Cron в ISPmanager

ISPmanager — панель для управления веб-серверами и сайтами. В неё уже включен инструмент для работы с Cron. Чтобы запланировать задачи на сервере, не нужно открывать терминал — управление происходит через формы и кнопки в панели.

Пример стандартного содержимого файла crontab пользователя root в ISPmanager:

[[php]] ## ISPmanager acme.sh certs update task 48 3 * * * /usr/local/mgr5/sbin/cron-core sbin/mgrctl -m core [[/php]]

В первой строке указано описание задачи: ## ISPmanager acme.sh certs update task.

Во второй строке указано, что каждый день в 3 часа 48 минут команда /usr/local/mgr5/sbin/cron-core sbin/mgrctl будет выполнена с параметрами -m core acmesh.certs.update. Надпись >/dev/null 2>/dev/null 2>/dev/null 2>https://www.ispmanager.ru/news/ispmanager-cron» target=»_blank»]www.ispmanager.ru[/mask_link]

Автоматизация задач с помощью cron в Ubuntu 18.04

Планировщик задач Cron — один из главных компонентов Unix-систем. Его предназначение — запуск определенных скриптов и задач в нужное время с заданной регулярностью.

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

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

Установка cron

В большинстве Linux-дистрибутивов компонент Cron уже установлен по умолчанию. Но если в вашей системе это не так, это легко можно сделать вручную. Для этого сначала нужно обновить локальный индекс пакетов в системе, а затем установить непосредственно cron в Ubuntu .

sudo apt update
sudo apt install cron

Основная функция Cron — регулярное выполнение скриптов в фоновом режиме. Поэтому после установки нужно убедиться, что служба включена. Для этого воспользуемся диспетчером systemd .

sudo systemctl enable cron

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

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

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

Каждое задание добавляется с новой строки, а для того, чтобы задать расписание, используется специальный несложный синтаксис. Строка условно делится на две части — настройки регулярности выполнения и непосредственно скрипт.

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

Расписание

Расписание — это пять полей, разделённых пробелами: минута (0–59), час (0–23), день (1–31), месяц (1–12, jan — dec), день недели (0–6, sun— mon). Для того, чтобы задавать регулярность выполнения задач, существуют специальные символы, которые значительно упрощают постановку задач Cron.

  1. * — символ подстановки, он представляет все значения. То есть, если вместо конкретных минут написать * , тогда скрипт будет выполняться ежеминутно.
  2. , используется для создания списка. Если нужно запускать скрипт два раза в сутки, не нужно создавать две записи. Вместо этого в поле «часы» достаточно написать, например, 5 , 10 , и скрипт будет выполняться два раза — в пять и в десять часов.
  3. — — задаёт диапазон значений. Если по каким-то причинам вы хотите, чтобы ваш скрипт исполнялся только во второй половине недели, то достаточно написать в соответствующем поле 4 — 7 .
  4. / обозначает шаг. Так, чтобы запускать скрипт каждые два часа в сутки, не нужно создавать 12 записей — достаточно просто написать */ 2 . Но в качестве шага можно использовать только те числа, которые делят диапазон поровну, иначе скрипт не будет запускаться.
  • * * * * * — каждую минуту
  • */ 15 2 — 12 * * * — каждые 15 минут, с 2 до 12 часов
  • 30 23 * * * — каждый день в 23:30
  • 1 , 55 */ 12 * 1 — 6 * — в 1 и 55 минуту часа два раза в сутки, но только первые полгода.
Читайте также:
Сверх базовая программа омс что это

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

Кроме того, в последних версиях Linux-дистрибутивов — в частности Ubuntu 20.04 — помимо задач приписан ещё и запуск утилиты run-parts. Эта утилита отвечает за выполнение скриптов из следующих каталогов:

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

В файле /etc/crontab использование утилиты run-parts не отличается от обычных задач и выглядит примерно так:

# run-parts
01 * * * * root run-parts /etc/cron.hourly
01 23 * * * root run-parts /etc/cron.daily
0 23 * * 0 root run-parts /etc/cron.weekly
20 23 * * * root run-parts /etc/cron.monthly

Для тех, кто только начинает знакомиться с синтаксисом планировщика crontab, советуем при создании записей пользоваться сервисом crontab.guru. Вы также можете настраивать задачи в панели cloud.timeweb.com или обратиться в службу поддержки — наши специалисты помогут вам и проконсультируют, если возникнут сложности.

Запуск скрипта

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

* * * * * /bin/echo «test string» >> /home/user/cron.log

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

*/10 * * * * /usr/bin/php /var/www/example.com/billing/proccessing-handler.php > /dev/null

В этой строке cron каждые 10 минут исполняет php-скрипт processing-handler.php, но сохраняет только ошибки.

Задачи cron запускаются от того пользователя, от которого они были добавлены в crontab. Это одна из самых распространённых ошибок при создании заданий. Часто скрипт нужно выполнять от пользователя root, но в crontab запись была сделана рядовым пользователем.

Как запланировать задачи в Ubuntu

Хоть crontab — это просто файл, изменять его напрямую не рекомендуется. Вместо этого нужно использовать команду crontab -e . Это позволит избежать ошибок синтаксиса или проблем с правами на файл. Настройка cron — по сути и есть просто редактирование файла с помощью вашего любимого текстового редактора, его вы сможете выбрать при первом запуске или с помощью команды select-editor.

В появившемся окне внесите своё расписание задач, каждое с новой строки. Продолжая пример со скриптом-обработчиком транзакций, добавим нужное задание в crontab. После добавления всех необходимых строк просто сохраняем изменения и закрываем редактор. Задача начала регулярно выполняться.

Для того, чтобы посмотреть, какие задачи выполняются, нужно прочитать файл. Существует много способов посмотреть содержимое файла —с помощью любого текстового редактора, команды cat или crontab -e . Но помимо этого вы можете воспользоваться специальной командой crontab -l .

Удалить файл можно командой crontab -ri . Флаг i очень важен, он запрашивает ваше подтверждение перед безвозвратным удалением файла. Если выполнить команду без него, файл удалится сразу.

Проверить результат работы cron

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

Уведомления на почту

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

Уведомления в журнал

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

С помощью оператора > нужно направить вывод в файл журнала — всё, в том числе ошибки, окажется в лог-файле.

*/20 * * * * rm -r /home/user/cache > /home/user/reports/cron-rm-cache.log

Отключить вывод

Когда скрипт ничего не выводит и просто исполняется в фоне, мы можем вообще отключить уведомления и журналирование. Для этого перенаправляем результат в уже знакомую нам пустую директорию /dev/null. Туда же — вывод ошибок, для этого добавляем конструкцию 2 > 1 — вывод по умолчанию, то есть в нашем случае /dev/null.

30 2,6 * * * /usr/bin/php /var/www/logout-bots.php > /dev/null 2>https://timeweb.cloud/tutorials/ubuntu/avtomatizaciya-zadach-s-pomoshchyu-cron-v-ubuntu-18-04″ target=»_blank»]timeweb.cloud[/mask_link]

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru