Crontab in linux ubuntu

Автоматизация задач с помощью 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 минуту часа два раза в сутки, но только первые полгода.
Читайте также:  Create folder linux cmd

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

  1. @reboot — задача выполняется только при загрузке системы, обычное расписание не предусматривает такой сценарий
  2. @yearly — задача выполняется один раз в год (синоним — @annualy )
  3. @monthly — скрипт запускается раз в месяц
  4. @daily — скрипт выполняется ежедневно (синоним — @midnight )
  5. @hourly — аналог запуску каждый час

Кроме того, в последних версиях 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 запись была сделана рядовым пользователем.

Читайте также:  Linux сгенерировать хэш пароля

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

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

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

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

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

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

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

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

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

Адрес электронной почты задаётся в начале файла crontab c помощью оператора MAILTO. Ниже — пример выдуманной задачи по очистке логов, её результат приходит на почту cloud@timeweb.com.

MAILTO = "cloud@timeweb.com"
0 1 * * * /bin/bash /remove-log.sh

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

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

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

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

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

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

30 2,6 * * * /usr/bin/php /var/www/logout-bots.php > /dev/null 2>&1

Но даже если вывод результатов отключён, можно проверить, работает ли скрипт, в журнале syslog. Отыщите там слово CRON с помощью команды grep .

Читайте также:  Обновление пакетов кали линукс

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

Источник

cron

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

Листинг

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

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

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

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

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

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

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

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

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

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

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

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

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

минута час день_месяца месяц день_недели команда
Значение Диапазон Дополнительно
минуты 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 имя_файла_расписания

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

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

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

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

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

Примеры

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

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

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

:-D

Новый год :

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

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

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

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

GUI версии

GTK+

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

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

KDE

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

Источник

Оцените статью
Adblock
detector