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

6 ответов

155

предназначен для перенаправления

— черная дыра, куда отправляются любые отправленные данные

— это дескриптор файла для стандартной ошибки

предназначен для перенаправления

— это символ дескриптора файла (без него следующий будет считаться именем файла)

— это дескриптор файла для стандартного вывода

Поэтому перенаправляет вывод вашей программы на . Включите как , так и .

Более подробная информация доступна на странице перенаправления ввода-вывода на странице документации Linux Documentation .

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

37

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

Чтобы разбить его:

  • — это дескриптор стандартной ошибки или
  • — это дескриптор стандартного вывода или

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

Кстати, вам нужно иметь перед . Это должно быть:

12

Это стандартное перенаправление ввода-вывода.

Всегда открываются три файла по умолчанию.

  • stdin (0)
  • stdout (1)
  • stderr (2)

Итак, в этом примере stdout () перенаправляется на .

Устройство — это файл устройства, который отбрасывает все записанные на него данные.

Затем stderr затем перенаправляется в stdout (), поэтому оба stdout и stderr перейдут к

Таким образом размещение этого в конце задания crontab будет подавлять все выходные данные и ошибки из команды.

Ссылка

6

Из руководства cron (8) :

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

Теперь к синтаксису: это специфично для языка оболочки Bourne (и его производных, таких как , и т. д.).

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

Дескриптор файла может быть именем файла адреса потока. — это адресный оператор, как на языке C.

Обычно дескриптор файла — это стандартный вывод (aka stdout ), а дескриптор файла — стандартная ошибка (aka stderr ). Часть

перенаправляет stdout на /dev /null.

перенаправляет поток ошибок в выходной поток, который был перенаправлен на /dev /null. Таким образом, никакой выпуск не создается, и никакая почта не отправляется.

Предупреждение: порядок перенаправления имеет значение:

не совпадает с

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

В самом деле, в более позднем случае файловый дескриптор установлен на текущий адрес файлового дескриптора « 1 (который в данный момент равен stdout ) и то дескриптор файла перенаправляется на . Файловый дескриптор по-прежнему перенаправляется на stdout , независимо от того, что происходит с файловым дескриптором .

2

Обычно, когда выполняет cronjob, он отправляет результат команды, заданной в cronjob, в учетную запись пользователя, выполняющую cronjob. Поэтому, когда ваш cronjob выполняет , например, вывод отправляется пользователю по электронной почте.

Чтобы быть понятным, подразумевается стандартный вывод () команды.
Теперь, если вы выполните команду в cornjob следующим образом:

  • означает перенаправление chanel 2 () в chanel 1 ()). Оба выхода теперь находятся на одном канале ().
  • : означает, что стандартный вывод (и стандартный вывод ошибки) отправляется на . — специальный файл:

Итак, вы отбрасываете вывод, и cron не может отправить сообщение.

1

В справочном руководстве Redirection Bash говорится:

кратко: все сообщения STDERR и STDOUT будут перенаправлены на

3.13. CRON – Запуск скрипта по расписанию

Вызвать запуск нужного вам скрипта с помощью планировщика CRON можно двумя способами: c помощью эмуляции загрузки определённого URL вашего сайта, что приводит к запуску нужного вам скрипта и с помощью прямого запуска скрипта без обращений к веб-сервисам по протоколу HTTP/HTTPS.

Способ №1 — Эмуляция загрузки URL сайта

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

В панели управления ISPManager в разделе «Инструменты»«Планировщик (cron)» добавьте задание в формате:

Важно использовать двойные кавычки для URL вашего CRON скрипта, т.к. в противном случае не будут переданы все параметры HTTP GET запросов

Пример CRON задания, при работе сайта по протоколу HTTP

В данном примере скрипт «cron.php» будет вызван с помощью интерпретатора PHP, установленного для сайта «website.com». При этом скрипту будет передан HTTP GET параметр «action» со значением «perform».

Пример CRON задания сайта работающего по протоколу HTTPS

Если ваш сайт использует для работы защищённый протокол HTTPS, тогда крайне рекомендуем использовать параметр wget «—no-check-certificate», отключающий проверку используемого на сайте SSL сертификата.

Способ №2 — Прямой запуск скрипта CRON

Описанный способ запускает необходимый вам скрипт с помощью прямого запуска интерпретатора, который исключает какие-либо обращения к веб-сервисам. Сильной стороной этого метода является отсутствие каких-либо прослоек в виде веб-сервисов при выполнении. Минусом является необходимость прямого указания интерпретатора для запуска того или иного скрипта, а для PHP ещё и требует указание версии интерпретатора, например PHP 7.1 или 8.0. К неприятным особенностям данного метода можно отнести и отсутствие возможности передачи POST/GET параметров. Единственное что можно передать − это ENV параметры, о чём будет написано ниже.

Для использования данного метода, в панели управления ISPManager в разделе «Инструменты»«Планировщик (cron)» нужно добавить задание в формате:

Пример CRON с передачей PHP скрипту ENV параметра

Как ранее описывалось, при таком методе запуска, единственной возможностью передать какой-либо дополнительный параметр будет использование ENV переменных в формате:

В данном примере скрипту «cron.php» был передан ENV параметр «MODE» со значением «production».

Отображение добавленного CRON задания

После добавления задания планировщика CRON, оно должно отобразится в перечне заданий. Для того, чтобы пользователи не получали большое количество мусорных сообщений, связанных с выполнением CRON, к каждому заданию автоматически будет добавлено » >/dev/null 2>&1 «. Наличие такой конструкции в конце команды является нормальным поведением панели управления хостингом и планировщика CRON.

Как использовать crotab

Команда crontab используется для открытия и редактирования/добавления заданий cron. Демон cron, запущенный в Linux, выполняет запланированные задания во время, определенное в crontab ( таблица cron). Основным общесистемным файлом crontab является файл /etc/crontab.

Cron по умолчанию установлен в большинстве дистрибутивов Linux. Каждый пользователь в системе Linux может управлять своими собственными заданиями cron. Каждый пользовательский cron хранится в папке /var/spool/cron/crontabs/ (может быть разным в разных дистрибутивах). Демон cron запускает как пользовательский, так и системный crontab.

Демон Cron имеет определенный путь $PATH по умолчанию, который вы можете найти в файле /etc/crontab. Если его не определить, либо используйте абсолютный путь, либо добавьте в переменную cron $PATH. Это стоит учитывать при написании заданий.

Уведомление по почте Cron по умолчанию отправляется владельцу кронтаба. Чтобы изменить это, отредактируйте переменную среды MAILTO.

Журналы Cron хранятся в системном журнале  /var/log/syslog в системах Ubuntu/Debian и в /var/log/cron в Redhat/Rocky Linux. Вы можете отфильтровать файл журнала с помощью команды grep, чтобы проверить, успешно ли выполнено задание cron или нет.

1. Редактировать/добавить задание для Crontab

Для редактирования (существующих заданий) или добавления нового cron используйте команду crontab -e. Это откроет редактор для текущего пользователя.

Чтобы отредактировать файл crontab другого пользователя, введите:

Или просто запустите команду crontab -e, войдя в систему от имени этого пользователя.

2. Список задач Cron

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

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

3. Удалить задачу cron

Чтобы удалить все задания cron текущего пользователя, выполните следующую команду:

Примечание: Это приведет к удалению всех заданий cron без запроса подтверждения.

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

Добавление команды в cron

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

Все запланированные действия будут выполнятся от текущего пользователя, если вы хотите указать другого пользователя используйте опцию -u:

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

Каждая задача формируется следующим образом:

минута(0-59) час(0-23) день(1-31) месяц(1-12) день_недели(0-7) /полный/путь/к/команде

Чтобы подставить любое значение используйте звездочку «*». Первые пять параметров характеризуют время выполнения, а последний, это путь к команде или скрипту, который нужно выполнить

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

Сделайте скрипт исполняемым:

Самый простой пример как запускать cron каждую минуту. Вместо всех параметров ставим просто звездочку:

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

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

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

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

Чтобы запустить cron каждые 10 минут используйте:

А для запуска cron каждые 30 минут:

Аналогичным образом задаются часы, например, выполнять скрипт только 6:00 и 18:00:

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

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

  • @reboot — при перезагрузке;
  • @yearly, @annually — раз в год (0 0 1 1 *);
  • @monthly — раз в месяц (0 0 1 * *);
  • @weekly — раз в неделю (0 0 * * 0);
  • @daily, @midnight — раз в день в полночь (0 0 * * *);
  • @hourly — раз в час (0 * * * *).

Когда настройка cron linux будет завершена, сохраните изменения и закройте файл. Для этого в Nano нажмите Ctrl+O для сохранения и Ctrl+X для закрытия редактора, а в Vim нажмите Esc и наберите :wq. Теперь новые задания Cron будут добавлены и активированы. Посмотреть как выполняется ваш Cron вы можете с помощью скрипта, который я привел выше либо в лог файле. Сервис cron пишет свои логи в стандартный журнал syslog. В Ubuntu они сохраняются в файле /var/log/syslog:

Если во время работы возникнут ошибки cron, они тоже будут здесь. Если же вам надо добавить задание Cron из какого либо скрипта, то вы всегда можете поместить свой скрипт в папку /etc/cron.d или /cron/hourly,… чтобы выполнять его когда надо, только не забудьте сделать скрипт исполняемым.

Как проверить, выполняются ли задания Cron

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

Cron имеет встроенную функцию уведомлений по электронной почте, но для этого требуется настроить хотя бы простой локальный почтовый сервер. почтовый сервер Не многие домашние пользователи желают настроить это, и не многие дистрибутивы предоставляют его по умолчанию (например, Ubuntu этого не делает). Самый быстрый способ проверить cron — это просмотреть системный журнал с помощью этой команды:

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

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

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

Что произойдет, если задание cron обнаружит ошибку?

Поведение по умолчанию – отправлять по электронной почте свой вывод. Эта функция предназначена для администраторов, которые могут автоматически отправлять журналы на «локальную» электронную почту в домене сети.

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

Вместо этого мы рассмотрим два распространенных способа обойти ошибку.

1) Отправить вывод в файл

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

Использование >>добавит информацию в существующий файл, в то время как один символ > перезапишет файл

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

Пример работы Cron:

0 * * * *  echo "Linux это круто!" >> ~/crontab_log.txt

2) Используйте /dev/null

Это обойдёт опцию электронной почты, по сути удалив данные. Стандартная ошибка (‘2’) и стандартный вывод (‘1’) отправляются в нулевой файл.

0 0 * * * echo "Why are you silencing me every night at midnight?" > /dev/null 2>&1

Вы могли заметить, что мы используем команду echo для примеров. Для этого нет особой причины, но она позволяет легко проверять изменения и «проверять свою работу».

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

Давайте попробуем создать нашу собственную работу cron. Если вы уже «подыгрываете», это здорово. Если нет, то сейчас самое время подготовить этот терминал и повеселиться.

Как СУММИРОВАТЬ время в Excel

Иногда вам может потребоваться быстро сложить все временные значения в Excel. Добавить несколько значений времени в Excel довольно просто (все, что нужно, — это простая формула SUM).

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

Давайте посмотрим на пример.

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

В ячейке B9 я использовал простую формулу СУММ, чтобы вычислить общее время, которое будут занимать все эти задачи, и оно дает мне значение 18:30 (что означает, что на выполнение потребуется 18 часов 20 минут. все эти задачи)

Пока все хорошо!

Как СУММИРОВАТЬ за 24 часа в Excel

Теперь посмотрим, что происходит, когда я меняю время выполнения задачи 2 с 1 до 10 часов.

В результате теперь отображается 03:20, что означает, что для выполнения всех этих задач потребуется 3 часа 20 минут.

Это неверно (очевидно)

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

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

К счастью, это легко исправить.

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

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

Формат ожидаемый результат
[Хм 28:30
: сс 1710:00
d «D» чч: мм 1 Д 04:30
d «D» hh «Min» ss «Sec» 1 д 04 мин 00 сек
d «День» hh «Минута» ss «Секунды» 1 день 04 минута 00 секунды

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

Вы можете использовать приведенную ниже формулу ТЕКСТ, чтобы показать время, даже если оно превышает 24 часа:

= ТЕКСТ (СУММ (B2: B7); «: мм: сс»)

или формулу ниже, если вы хотите преобразовать часы, превышающие 24 часа, в дни:

= ТЕКСТ (СУММ (B2: B7); «дд чч: мм: сс»)

Что такое Crontab?

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

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

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

Примеры Cron

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

  • Запускайте команду в 15:00 каждый день с понедельника по пятницу:

  • Запускать скрипт каждые 5 минут и перенаправлять стандартный вывод на , только стандартная ошибка будет отправлена ​​на указанный адрес электронной почты:

  • Выполните две команды каждый понедельник в 3 часа дня (используйте оператор между командами):

  • Запускайте PHP-скрипт каждые 2 минуты и записывайте результат в файл :

  • Запускать сценарий каждый день, каждый час, каждый час, с 8:00 до 16:00:

  • Запускать сценарий в первый понедельник каждого месяца в 7 часов утра.

  • Запускайте сценарий в 21:15 1 и 15 числа каждого месяца:

  • Набор пользовательских , , и переменные и запустить команду каждую минуту.

Настройка Cron в ISPmanager

Настроить Cron на хостинге проще всего через панель управления. Для примера разберем как производится настройка планировщика в ISPmanager 4.

  1. Открываем панель управления ISPmanager и переходим в «Планировщик» в разделе «Главное». Далее создаем новое задание, нажимая на кнопку «Создать».
  2. Заполняем поля в открывшемся редакторе и нажимаем «ОK»:
  • Команда — здесь указываем полный путь (директорию) к исполняемому файлу программы или готовому рабочему скрипту.
  • Описание — по желанию можно добавить краткое описание выполняемого задания.
  • Расписание — добавляем расписание с возможностью выбора режима. Режим «Базовый» —  с выбором доступных вариантов и «Экспертный» — самостоятельная настройка.
  1. Eсли есть возможность, нужно настроить получение отчетов по запуску заданий на почтовый адрес пользователя. Для этого открываем «Планировщик» → «Настройки» → «Адрес e-mail» и указываем адрес почты для получения. После чего нужно убедиться, что в настройках не стоит галочка напротив «Не отправлять отчет по e-mail».

Что делать, если Cron не работает?

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

Служба cron запущена?

Как вы знаете, демон cron должен работать в фоновом режиме. Убедитесь, что это действительно так. Сервис называется crond или просто cron.

Для дистрибутивов, использующих systemd:

Для дистрибутивов, использующих Upstart:

Если ваш дистрибутив использует «старый» подход System V init, перечислите все сервисы с:

и посмотрите, есть ли в списке cron.

Вам даже разрешено иметь файл crontab?

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

Ваши переменные установлены правильно?

Crontab автоматически устанавливает переменную SHELL в . Тем не менее, если вы выбираете оболочку fish или bash, вы должны изменить переменную SHELL , Аналогично, переменная PATH по умолчанию содержит только несколько каталогов. Именно здесь crontab ищет команды Linux. Если ваша задача cron не запускается, это может быть потому, что crontab не «видит» команду, которую вы использовали. Чтобы избежать этого, добавьте каталоги, содержащие команды, в переменную PATH, разделенные двоеточиями:

Если вы не хотите редактировать это в вашем crontab, вы можете определить эти переменные в скрипте, который вы хотите запустить как задание cron.

Ваш crontab форматируется?

Синтаксис Crontab не совсем гладко. Даже если вы подтвердите это с помощью онлайн-инструментов, упомянутых ранее, небольшая ошибка может помешать cron выполнять ваши задания. Будьте осторожны с:

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

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

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

30 3 * * 2 /yourdirectory/myscript.pl

На более понятном простому пользователю языке тут обозначены: Минуты/Часы/ДеньМесяца/ДеньНедели/Команда. Данный пример означает, что в 3:30 ночи, каждый вторник, Сron должен запускать файл с названием youdirectory/myscript.pl.

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

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

Также можно задать периодичность, написав в графе времени, например, в «Часы» /12. Тогда задача будет исполняться каждые 12 часов.

Важно знать, что «*» означает не отсутствие значения, а все возможные значения. То есть, если задать * * * * 1 /yourdirectory/myscript.pl, желая, чтобы файл запускался каждый понедельник, то это окажется совершенно неверным и файл будет запускаться каждую минуту

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

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

Переменные Crontab

Демон cron автоматически устанавливает несколько переменных окружения .

  • Путь по умолчанию установлен в . Если команда, которую вы вызываете, присутствует в указанном пути cron, вы можете использовать абсолютный путь к команде или изменить переменную cron . Вы не можете неявно добавлять, как если бы вы использовали обычный скрипт.
  • Оболочка по умолчанию установлена ​​в . Вы можете установить другую оболочку, изменив переменную.
  • Cron вызывает команду из домашнего каталога пользователя. Переменной может быть изменено с помощью настроек в crontab.
  • Уведомление по электронной почте отправляется владельцу crontab. Чтобы перезаписать поведение по умолчанию, вы можете использовать переменную среды со списком (через запятую) всех адресов электронной почты, которые вы хотите получать по электронной почте. Если определено, но пусто ( ), письмо не отправляется.

Как посмотреть список ежедневных заданий Cron

Просмотреть список ежедневных заданий cron можно с помощью следующей команды:

$ ls -la /etc/cron.daily/

total 72

drwxr-xr-x  2 root root  4096 Apr 24 20:46 .

drwxr-xr-x 96 root root  4096 May 19 17:12 ..

-rw-r--r--  1 root root   102 Feb  9  2013 .placeholder

-rwxr-xr-x  1 root root   376 Apr  4  2014 apport

-rwxr-xr-x  1 root root 15481 Apr 10  2014 apt

-rwxr-xr-x  1 root root   314 Feb 18  2014 aptitude

-rwxr-xr-x  1 root root   355 Jun  4  2013 bsdmainutils

-rwxr-xr-x  1 root root   256 Mar  7  2014 dpkg

-rwxr-xr-x  1 root root   372 Jan 22  2014 logrotate

-rwxr-xr-x  1 root root  1261 Sep 23  2014 man-db

-rwxr-xr-x  1 root root   435 Jun 20  2013 mlocate

-rwxr-xr-x  1 root root   249 Feb 17  2014 passwd

-rwxr-xr-x  1 root root  2417 May 13  2013 popularity-contest

-rwxr-xr-x  1 root root   214 Mar 27  2017 update-notifier-common

-rwxr-xr-x  1 root root   328 Jul 18  2014 upstart

Синтаксис Crontab

Каждая строка в файле crontab представляет задание. Это задание содержит пять полей, за которыми следует команда  или скрипт для выполнения.

Синтаксис:

* Минуты Это значение может быть в пределах 0 — 59
* Часы Это значение может быть в пределах 0 — 23
* День месяца Это значение может быть в пределах 1 — 31
* Месяц в году Это значение поля находится в диапазоне от 1 до 12. Так же можно использовать три первые буквы названия месяца, например: jan, feb, mar
* День недели Это значение поля находится в диапазоне от 0 до 7. Где 0 и 7-воскресенье. 1-понедельник, 2-вторник и так далее

Указать несколько значений или диапазон

Для определения нескольких значений или диапазона используйте запятую (,) и дефис (-). Звездочка (*) соответствует чему угодно. Например, для отображения нескольких значений используйте 1,2,3, а для диапазона можно использовать 1-3.

пример:

0 10 1-3 * * /scripts/test.sh

Отчет

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

MAILTO= [email protected]

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

Настройте доступ crontab для вашей учетной записи пользователя

Crontab зависит от пользователя. Вы уже затронули это немного. Если вы думаете, что вы уже использовали crontab, вы можете проверить это с помощью crontab -l .

andreyex@destroyer:~$ crontab -l
no crontab for andreyex

andreyex@destroyer:~$ crontab -e
no crontab for andreyex - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/code
  3. /bin/ed

Choose 1-3 : 1

Когда мы запускаем эту команду, вы видите, что у нас нет crontab в этой системе.

Поскольку мы еще не создали crontab, когда используем -e для редактирования таблицы, он запрашивает наш предпочтительный текстовый редактор. Nano предлагается в качестве самой простой в использовании программы. Вы можете использовать любой текстовый редактор командной строки, например Vim или Emacs. Это действительно зависит от вас.

Если сначала не получится, sudo

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

sudo crontab -e <your_username>

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

Настройка Cron

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

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

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

Синтаксис crontab

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

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

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

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

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

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

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

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

Еще дальше:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: