Cron linux как добавить задание
Обновлено: 21.11.2024
Создание и редактирование задания cron — самая удивительная часть Linux, где вам не нужно перезапускать cron или даже компьютер после создания или редактирования задания cron. Давайте подробно рассмотрим Cron в Linux.
Задание Cron или Cron — это основанный на времени планировщик, распространенный в системах Linux/Unix. Он планирует определенные пользовательские задачи для периодического запуска в фиксированную дату, время или интервалы. Большинство этих задач представляют собой сценарии для выполнения таких функций, как резервное копирование и многое другое. Чтобы создать эти задания cron, мы используем команды crontab. crontab — это команда/утилита UNIX, используемая для создания заданий cron и управления ими.
Как вы увидите ниже, создать и изменить задание cron довольно просто. Самое удивительное, что вам не нужно перезагружать cron или даже компьютер после создания или редактирования задания cron. Просто сохраните файл, и все готово.
Распространенное использование заданий Cron
- Установка аппаратного времени. Протокол сетевого времени используется многими компьютерами для установки системного времени, но не аппаратного времени. С помощью cron вы можете установить аппаратное время на основе системного времени.
- Планирование задач и запуск программ, выполняющих ежедневные программы. С помощью службы cron вы можете запускать множество системных служб, которым требуется ежедневная подсказка, например Logwatch.
- Автоматическая очистка каталога, запуск программ резервного копирования и многое другое.
Основные части команды cron
Стандартный синтаксис crontab следующий:
1.Время и дата, а также частота повторения задания указываются в пяти полях:
Примечание. Дни начинаются с понедельника. 0 и 7 представляют воскресенье
<р>2. ИМЯ ПОЛЬЗОВАТЕЛЯ: не забудьте заменить его своим именем пользователя <р>3. Конкретное местоположение и сценарий, который должен быть выполнен cron, указываются третьим сегментом: <р>4. Последний раздел определяет уведомление пользователя о завершении задания как способ отслеживания задач:Однако ваш почтовый ящик может быть переполнен второстепенными задачами, которые часто передаются по каналам. Чтобы избежать этого, вы можете отключить автоматический вывод электронной почты, добавив следующую строку в вашу команду cron:
- Звездочка (*): относится ко всем значениям в поле.
- Запятая (,): используйте для разделения списка значений в команде cron.
- Дефис (-): укажите диапазон значений.
- Косая черта (/): разделяет значение на несколько шагов.
Настройка заданий cron
Команды crontab отвечают за создание и редактирование заданий cron, поскольку файлы cron нельзя редактировать напрямую. crontab определяет, как вы можете создавать, редактировать, перечислять, отлаживать, устанавливать и удалять задачи cron.
Прежде чем приступить к работе с заданиями cron, необходимо убедиться, что ваш рабочий стол или сервер Linux обновлен, выполнив следующие команды:
Если в вашей системе не установлен пакет cron, установите его с помощью следующей команды:
Установить cron
Как редактировать файл crontab?
Чтобы завершить процесс, вам необходимо настроить задание cron. Пользователь, вошедший в систему при создании задания cron, автоматически становится владельцем. Это можно изменить, создав владельца задания, который будет отвечать за управление заданием cron, как мы увидим в этом посте.
Чтобы открыть файл конфигурации crontab для пользователя, выполнившего вход в систему, выполните следующую команду:
Система предложит вам выбрать подходящий редактор. В нашем случае мы выберем первый вариант (наноредактор).
кронтаб -e
Вы можете добавить по одной запланированной задаче в строку в соответствии со своими предпочтениями.
файл crontab
После добавления задач сохраните файл и выйдите. Все предоставленные инструкции будут прочитаны и выполнены демоном cron. Изменения вступят в силу даже без перезагрузки системы, поскольку репозиторий обновляется автоматически.
Редактировать crontab для другого пользователя
Кронтаб можно редактировать для разных пользователей с помощью команды, приведенной ниже:
Как использовать специальные символы в командах crontab
Символы и операторы требуют дополнительной настройки вашей системы, поскольку они расширяют возможности задачи cron.
- Косая черта используется для разделения временной строки на указанные шаги. Например, чтобы запускать резервное копирование каждые 30 минут, мы можем использовать: */30 * * * *
- Звездочка (*) используется для выполнения всех значений, которые должны быть выполнены. Например:
- Дефис (-) используется для обозначения диапазона действий, например количества дней. Например,
запуская код в 6 утра каждый будний день, мы будем использовать;
Здесь 06 означает 6:00, а 1–5 означает количество дней (с понедельника по пятницу).
-
Запятая указывает отдельные экземпляры, когда должен выполняться код:
1-23 указывает диапазон часов, /2 устанавливает интервал через каждый час.
Параметры Cron
Возможно, вы захотите просмотреть список заданий cron в вашей системе, не разблокируя файл конфигурации crontab. Это можно сделать, запустив терминал и введя следующую команду:
список заданий cron
Эта команда выводит список всех заданий cron, имеющихся в вашей системе.
Чтобы удалить все команды crontab, вы можете использовать следующую команду:
Использование строк в Crontab
Строки — чрезвычайно полезный инструмент для разработчиков, поскольку они позволяют избежать повторного написания сегментов кода. К счастью, crontabs поддерживают различные строковые значения. К ним относятся:
@hourly: -same as – «0 * * * *» (выполняется один раз в час)
@midnight: -same as – «0 0 * * *» (выполняется один раз в день)
@daily: то же, что и в полночь
@weekly: -то же, что и – «0 0 * * 0» (выполняется раз в неделю)
@monthly: -то же, что и – «0 0 1 * *» ( Выполняется один раз в месяц)
@annually: -то же, что и – «0 0 1 1 *» (Выполняется один раз в год)
@yearly: аналогично @annually
@reboot: Выполняется один раз после при каждой перезагрузке/перезагрузке/запуске.
Хороший пример; если у вас есть сценарий резервного копирования, который вы хотите запускать каждый день, используйте следующую команду:
Примеры заданий cron
Вот список основных заданий cron, которые можно использовать при начале работы:
- Чтобы запускать скрипт каждую минуту:
- Чтобы запускать скрипт каждые 40 минут:
- Чтобы запускать скрипт каждый час:
- Чтобы запускать скрипт каждую полночь:
- Чтобы запускать сценарий каждые 23 минуты после полуночи, 2 и 4 часов каждый день:
- Запускать скрипт в 4:05 каждое воскресенье.
- Для запуска скрипта в 22:00 в течение недели.
- Для запуска сценария 1 декабря в полночь.
- Чтобы запустить сценарий в субботу в полночь.
- Чтобы запускать скрипт каждый час.
Эти базовые примеры помогут вам глубже понять последовательность и то, как ее можно изменить.
Ограничение доступа к Cron
Мы видим, что задания cron могут пригодиться, особенно если вы хотите автоматизировать свои задачи. Однако это также может быть рискованно, если система позволяет любому пользователю создавать задание cron. Даже если это не влияет на личные данные, некоторые задания cron могут занимать довольно много системных ресурсов, тем самым отставая от ПК. Чтобы избежать таких сценариев, системный администратор (пользователь root) может создать файл /etc/cron.allow или /etc/cron.deny, содержащий только пользователей, которые могут создавать/не создавать. задание cron.
Файл /etc/cron.allow содержит пользователей, которые могут создавать, редактировать, отображать или удалять файлы crontab. Если этот файл не существует, все пользователи могут создавать и управлять заданиями cron, кроме заданий в файле /etc/cron.deny. Если ни один из этих файлов отсутствует, для запуска команды crontab требуются права суперпользователя.
cron разрешить файл
Теперь, когда вы запретили пользователям без полномочий root создавать задания cron, если они у них уже были, вы можете подумать о добавлении их заданий cron в корневой файл crontab. Но вот загадка — добавление их заданий cron в корневой crontab, разве это не запускает их задания cron от имени пользователя root? Ну, вот и важность поля USERNAME, которое мы обсуждали выше в синтаксисе команды cron. Например, команда ниже:
Задание cron будет выполняться от имени пользователя «fosslinux», а не от имени пользователя root.
Заключение
Теперь у вас есть четкое руководство по использованию заданий Cron для автоматизации различных задач в вашей системе. Это не должно вас смущать при запуске приложений. Используйте приведенные выше примеры, чтобы попытаться автоматизировать простые скрипты. Со временем вы сможете комбинировать специальные символы и подстановочные знаки для выполнения гораздо более обыденных задач. Если вы только начинаете, было бы здорово прочитать наш пост об учебном пособии по написанию сценариев bash с примерами, которые помогут вам создать свой первый сценарий.
Демон Cron — это встроенная утилита Linux, которая запускает процессы в вашей системе в запланированное время. Cron читает crontab (таблицы cron) для предопределенных команд и сценариев.
Используя определенный синтаксис, вы можете настроить задание cron для автоматического запуска скриптов или других команд.
В этом руководстве с примерами показано, как настроить задание cron в Linux.
Основной синтаксис Crontab
Cron считывает из файлов конфигурации список команд для выполнения. Демон использует специальный синтаксис для интерпретации строк в таблицах конфигурации crontab.
Чтобы настроить задание cron, нам необходимо понять основные элементы, из которых состоит этот синтаксис. Стандартная форма строки crontab выглядит следующим образом:
<р>1. Первые пять полей a b c d e указывают время/дату и периодичность задания. <р>2. Во втором разделе /directory/command указывает расположение и сценарий, который вы хотите запустить. <р>3. Вывод конечного сегмента является необязательным. Он определяет, как система уведомляет пользователя о завершении задания.1. Формат времени задания Cron
Первые пять полей в команде представляют собой числа, которые определяют, когда и как часто выполняется команда. Пробел отделяет каждую позицию, которая представляет определенное значение.
В таблице ниже приведены возможные значения для полей и пример синтаксиса:
После добавления задач сохраните файл и выйдите. Демон cron прочитает и выполнит предоставленные инструкции.
Помните, что Cron не нужно перезапускать, чтобы изменения вступили в силу.
Редактировать crontab для другого пользователя
Чтобы отредактировать crontab для другого пользователя, введите следующую команду:
Примечание. Если вам нужно запустить задание cron при перезагрузке, обратитесь к нашему руководству Crontab on Boot.
Примеры заданий Cron
При указании заданий используйте звездочку, чтобы указать все значения. Ввод значения в одно из полей запускает команду только для этого значения. Например:
Несмотря на то, что он запускается в 2 часа ночи, он запускается только тогда, когда первое число месяца (0) приходится на среду (4). Если вы измените на следующее:
Команда запускается первого числа каждого месяца в 2 часа ночи. В следующей таблице представлены несколько основных команд, использующих файл /root/backup.sh из наших предыдущих примеров.
Примечание. Ознакомьтесь с сообщением о команде at, альтернативе заданию cron.
Теперь вы хорошо понимаете, как использовать cron для планирования задач в Linux. Используйте примеры, представленные в этом руководстве, для создания и планирования заданий cron в вашей системе. Со временем расширяйте задачи, используя специальные символы, чтобы автоматизировать большинство рутинных задач.
Я хочу запланировать выполнение задачи на регулярной основе и слышал, что для этого можно использовать Cron.
Как добавить задания Cron в Ubuntu?
8 ответов 8
Поместите сценарий оболочки в одну из следующих папок: /etc/cron.daily , /etc/cron.hourly , /etc/cron.monthly или /etc/cron.weekly .
Если вам этого недостаточно, вы можете добавить более конкретные задачи, например. два раза в месяц или каждые 5 минут. Перейдите в терминал и введите:
Откроется ваш личный crontab (файл конфигурации cron). Первая строка в этом файле все объясняет! В каждой строке вы можете определить одну команду для запуска и ее расписание, и формат довольно прост, когда вы его освоите. Структура:
Для всех номеров можно использовать списки, например 5,34,55 в поле минут будут означать запуск в 5 мин, 34 мин и 55 мин, независимо от того, какой час установлен.
Вы также можете использовать интервалы. Они определяются следующим образом: */20 . Этот пример означает каждое 20-е число, поэтому в столбце минут это эквивалентно 0,20,40 .
Итак, запускать команду каждый понедельник в 17:30:
или каждые 15 минут
Обратите внимание, что день недели идет от 0 до 6, где 0 — воскресенье.
Подробнее можно прочитать здесь.
@Марсело Моралес, который также будет запускать данные команды от имени пользователя root! если вы, с другой стороны, не используете sudo, вы создадите пользовательский crontab, и он будет запущен от имени создавшего его пользователя!
Стоит отметить, что эти изменения применяются автоматически, вам не нужно ничего перезапускать/перезагружать.
Еще один полезный совет: вместо */15 * * * * /path/to/command вы можете сделать @reboot /path/to/command, чтобы выполнить что-то при запуске.
Если задание, которое вы хотите запустить, может быть запущено с теми же привилегиями, что и ваш пользователь, я рекомендую использовать пользовательский crontab, который вы можете редактировать, запустив EDITOR="gedit" crontab -e (который будет использовать gedit для редактирования файла crontab ) или просто crontab -e (который будет использовать редактор по умолчанию) в терминале.
Если вы хотите запускать что-то, например, каждые 10 минут, добавьте такую строку
и сохраните файл.
Вы можете просмотреть содержимое пользовательского crontab с помощью crontab -l .
Чтобы добавить задание cron, которое запускается от имени root, вы можете отредактировать crontab root, выполнив команду sudo crontab -e .
Самый гибкий способ — использовать системный crontab /etc/crontab, который вы можете редактировать только с привилегиями root. В этом файле пользователь должен запускать каждую команду, как указано, поэтому вы можете запускать свои команды от имени пользователя root (если вам нужен этот уровень привилегий) или любого другого пользователя в системе.
Например, если вы хотите запускать что-то каждые 10 минут от имени пользователя root, добавьте такую строку
(обратите внимание на добавление пользователя в строку)
Вы можете просмотреть содержимое системного файла crontab с помощью команды cat /etc/crontab .
Нет времени на команды? Планирование задач с помощью cron означает, что программы могут работать, но вам не нужно ложиться спать допоздна.
Одна из проблем (среди многих преимуществ) работы системного администратора — выполнение задач, когда вы предпочитаете спать. Например, некоторые задачи (в том числе регулярно повторяющиеся задачи) необходимо выполнять ночью или в выходные дни, когда ожидается, что никто не будет использовать ресурсы компьютера. У меня нет времени по вечерам запускать команды и скрипты, которые должны работать в нерабочее время. И я не хочу вставать в темную сотню, чтобы начать резервное копирование или крупное обновление.
Вместо этого я использую две служебные утилиты, которые позволяют мне запускать команды, программы и задачи в заранее определенное время. Службы cron и at позволяют системным администраторам планировать выполнение задач в определенное время в будущем. Служба at указывает одноразовую задачу, которая запускается в определенное время. Служба cron может планировать повторяющиеся задачи, например ежедневно, еженедельно или ежемесячно.
В этой статье я расскажу о службе cron и о том, как ее использовать.
Распространенное (и необычное) использование cron
Я использую службу cron для планирования очевидных вещей, таких как регулярное резервное копирование, которое выполняется ежедневно в 2 часа ночи. Я также использую ее для менее очевидных вещей.
- Системное время (то есть время операционной системы) на многих моих компьютерах устанавливается с помощью протокола сетевого времени (NTP). Хотя NTP устанавливает системное время, он не устанавливает аппаратное время, которое может дрейфовать. Я использую cron для установки аппаратного времени на основе системного времени.
- У меня также есть программа Bash, которую я запускаю каждое утро и которая создает новое "сообщение дня" (MOTD) на каждом компьютере. Он содержит информацию, такую как использование диска, которая должна быть актуальной, чтобы быть полезной.
- Многие системные процессы и службы, такие как Logwatch, logrotate и Rootkit Hunter, используют службу cron для ежедневного планирования задач и запуска программ.
Демон crond — это фоновая служба, обеспечивающая работу cron.
Служба cron проверяет наличие файлов в каталогах /var/spool/cron и /etc/cron.d, а также в файле /etc/anacrontab. Содержимое этих файлов определяет задания cron, которые должны запускаться с различными интервалами. Отдельные пользовательские файлы cron расположены в /var/spool/cron, а системные службы и приложения обычно добавляют файлы заданий cron в каталог /etc/cron.d. /etc/anacrontab — это особый случай, который будет рассмотрен далее в этой статье.
Использование crontab
Утилита cron запускается на основе команд, указанных в таблице cron (crontab). Каждый пользователь, включая root, может иметь файл cron. Эти файлы не существуют по умолчанию, но могут быть созданы в каталоге /var/spool/cron с помощью команды crontab -e, которая также используется для редактирования файла cron (см. сценарий ниже). Я настоятельно рекомендую вам не использовать стандартный редактор (например, Vi, Vim, Emacs, Nano или любой из многих других доступных редакторов). Использование команды crontab позволяет не только редактировать команду, но и перезапускать демон crond при сохранении и выходе из редактора. Команда crontab использует Vi в качестве базового редактора, потому что Vi всегда присутствует (даже в самых простых установках).
Новые файлы cron пусты, поэтому команды нужно добавлять с нуля. Я добавил приведенный ниже пример определения задания в свои собственные файлы cron в качестве краткого справочника, чтобы знать, что означают различные части команды. Не стесняйтесь копировать его для собственного использования.
Команда crontab используется для просмотра или редактирования файлов cron.
Первые три строки кода выше задают среду по умолчанию.Среда должна быть настроена на то, что необходимо для данного пользователя, потому что cron не предоставляет никакой среды. Переменная SHELL указывает оболочку, используемую при выполнении команд. В этом примере указана оболочка Bash. Переменная MAILTO задает адрес электронной почты, на который будут отправляться результаты задания cron. Эти электронные письма могут сообщать о статусе задания cron (резервное копирование, обновления и т. д.) и состоять из вывода, который вы бы увидели, если бы запускали программу вручную из командной строки. Третья строка устанавливает PATH для среды. Несмотря на то, что путь указан здесь, я всегда добавляю полный путь к каждому исполняемому файлу.
В приведенном выше примере есть несколько строк комментариев, в которых подробно описывается синтаксис, необходимый для определения задания cron. Я разберу эти команды, а затем добавлю еще несколько, чтобы показать вам более продвинутые возможности файлов crontab.
Эта строка в файле /etc/crontab запускает сценарий, который выполняет резервное копирование моих систем.
Эта строка запускает мой самописный сценарий оболочки Bash, rsbu, который выполняет резервное копирование всех моих систем. Эта работа начинается в 01:01 (01:01) каждый день. Звездочки (*) в позициях три, четыре и пять в спецификации времени подобны файловым шаблонам или подстановочным знакам для других временных интервалов; они указывают «каждый день месяца», «каждый месяц» и «каждый день недели». Эта строка запускает мои резервные копии дважды; один выполняет резервное копирование на внутренний выделенный жесткий диск для резервного копирования, а другой — на внешний USB-накопитель, который я могу взять с собой в сейф.
Следующая строка устанавливает аппаратные часы на компьютере, используя системные часы в качестве источника точного времени. Эта линия настроена на 5:03 утра (03 05) каждый день.
Эта строка устанавливает аппаратные часы, используя системное время в качестве источника.
Я использовал третье и последнее задание cron (закомментировано) для выполнения обновления dnf или yum в 04:25 в первый день каждого месяца, но я закомментировал его, чтобы оно больше не выполнялось.
Эта строка раньше выполняла ежемесячное обновление, но я закомментировал ее.
Другие приемы планирования
Теперь давайте сделаем кое-что более интересное, чем эти основы. Предположим, вы хотите запускать определенное задание каждый четверг в 15:00:
Эта строка запускает mycronjob.sh каждый четверг в 15:00
Или, возможно, вам нужно запускать ежеквартальные отчеты после окончания каждого квартала. Служба cron не имеет параметра «Последний день месяца», поэтому вместо этого вы можете использовать первый день следующего месяца, как показано ниже. (Это предполагает, что данные, необходимые для отчетов, будут готовы, когда задание будет запущено.)
Это задание cron создает ежеквартальные отчеты в первый день месяца после окончания квартала.
Ниже показано задание, которое выполняется через одну минуту каждого часа с 9:01 до 17:01.
Иногда вам нужно запускать задания в обычное время в обычные рабочие часы.
Я сталкивался с ситуациями, когда мне нужно запускать задание каждые два, три или четыре часа. Этого можно добиться, разделив часы на желаемый интервал, например */3 для каждых трех часов или 6-18/3 для запуска каждые три часа с 6 утра до 6 вечера. Аналогично можно разделить и другие интервалы; например, выражение */15 в позиции минут означает "выполнять задание каждые 15 минут".
Это задание cron выполняется каждые пять минут в течение каждого часа с 8:00 до 17:58
Обратите внимание: выражения деления должны давать в остатке ноль, чтобы задание могло выполняться. Вот почему в этом примере задание настроено на запуск каждые пять минут (08:05, 08:10, 08:15 и т. д.) в четные часы с 8:00 до 18:00, но не в нечетные часы. пронумерованные часы. Например, задание вообще не будет выполняться с 9 часов вечера. до 9:59
Я уверен, что вы можете придумать много других вариантов на основе этих примеров.
Ограничение доступа к cron
Дополнительные ресурсы по Linux
Обычные пользователи с доступом к cron могут совершать ошибки, которые, например, могут привести к перегрузке системных ресурсов (таких как память и процессорное время). Чтобы предотвратить возможное неправильное использование, системный администратор может ограничить доступ пользователей, создав файл /etc/cron.allow, содержащий список всех пользователей, которым разрешено создавать задания cron. Нельзя запретить пользователю root использовать cron.
Поскольку пользователи без полномочий root не могут создавать свои собственные задания cron, пользователю root может потребоваться добавить свои задания cron в корневой crontab. "Но ждать!" ты говоришь. «Разве это не запускает эти задания от имени пользователя root?» Не обязательно. В первом примере в этой статье поле имени пользователя, показанное в комментариях, можно использовать для указания идентификатора пользователя, который должен иметь задание при запуске. Это предотвращает выполнение заданий указанного пользователя без полномочий root от имени пользователя root. В следующем примере показано определение задания, которое выполняет задание от имени пользователя «студент»:
Если пользователь не указан, задание выполняется от имени пользователя, которому принадлежит файл crontab, в данном случае root.
cron.d
Каталог /etc/cron.d — это место, где некоторые приложения, такие как SpamAssassin и sysstat, устанавливают файлы cron. Поскольку нет пользователя spamassassin или sysstat, этим программам нужно место для размещения файлов cron, поэтому они помещаются в /etc/cron.d.
Файл /etc/cron.d/sysstat ниже содержит задания cron, относящиеся к отчетам об активности системы (SAR). Эти файлы cron имеют тот же формат, что и пользовательский файл cron.
Пакет sysstat устанавливает файл cron /etc/cron.d/sysstat для запуска программ для SAR.
В файле cron sysstat есть две строки, которые выполняют задачи. Первая строка запускает программу sa1 каждые 10 минут для сбора данных, хранящихся в специальных двоичных файлах в каталоге /var/log/sa. Затем каждую ночь в 23:53 запускается программа sa2 для создания сводки за день.
Советы по планированию
Некоторые значения времени, которые я установил в файлах crontab, кажутся довольно случайными — и в какой-то степени так оно и есть. Попытка запланировать задания cron может быть сложной задачей, особенно по мере увеличения количества заданий. Обычно мне нужно запланировать лишь несколько задач на каждом из моих компьютеров, что проще, чем в некоторых производственных и лабораторных средах, где я работал.
В одной системе, которую я администрировал, было около дюжины заданий cron, которые выполнялись каждую ночь, и еще три или четыре задания, которые выполнялись по выходным или в начале месяца. Это было проблемой, потому что, если одновременно выполнялось слишком много заданий — особенно резервное копирование и компиляция — в системе заканчивалась оперативная память и почти заполнялся файл подкачки, что приводило к зависанию системы и падению производительности, так что ничего не делалось. Мы добавили больше памяти и улучшили планирование задач. Мы также удалили задачу, которая была очень плохо написана и использовала большой объем памяти.
Служба crond предполагает, что хост-компьютер работает постоянно. Это означает, что если компьютер выключается в период, когда запланировано выполнение заданий cron, они не будут выполняться до тех пор, пока не будут запланированы в следующий раз. Это может вызвать проблемы, если они являются критическими заданиями cron. К счастью, есть еще один вариант запуска заданий через равные промежутки времени: anacron.
анакрон
Программа anacron выполняет ту же функцию, что и crond, но добавляет возможность запуска заданий, которые были пропущены, например, если компьютер был выключен или по другой причине не мог выполнить задание в течение одного или нескольких циклов. Это очень полезно для ноутбуков и других компьютеров, которые выключены или переведены в спящий режим.
Как только компьютер включается и загружается, anacron проверяет, не пропустили ли сконфигурированные задания свой последний запланированный запуск. Если они есть, эти задания запускаются немедленно, но только один раз (независимо от того, сколько циклов было пропущено). Например, если еженедельное задание не выполнялось в течение трех недель из-за того, что система была выключена во время вашего отпуска, оно будет запущено вскоре после включения компьютера, но только один раз, а не три раза.
Программа anacron предоставляет несколько простых опций для выполнения регулярно запланированных задач. Просто установите свои скрипты в каталоги /etc/cron.[hourly|daily|weekly|monthly] в зависимости от того, как часто их нужно запускать.
Как это работает? Последовательность проще, чем кажется на первый взгляд.
- Служба crond запускает задание cron, указанное в файле /etc/cron.d/0hourly.
Содержимое /etc/cron.d/0hourly запускает сценарии оболочки, расположенные в /etc/cron.hourly.
- Задание cron, указанное в файле /etc/cron.d/0hourly, запускает программу run-parts один раз в час.
- Программа run-parts запускает все сценарии, расположенные в каталоге /etc/cron.hourly.
- Каталог /etc/cron.hourly содержит сценарий 0anacron, который запускает программу anacron с помощью показанного здесь файла конфигурации /etdc/anacrontab.
Содержимое файла /etc/anacrontab запускает исполняемые файлы в каталогах cron.[daily|weekly|monthly] в соответствующее время.
- Программа anacron запускает программы, расположенные в /etc/cron.daily, один раз в день; он запускает задания, расположенные в /etc/cron.weekly, один раз в неделю, а задания в cron.monthly - один раз в месяц. Обратите внимание на указанное время задержки в каждой строке, которое помогает предотвратить наложение этих заданий друг на друга и других заданий cron.
Вместо того, чтобы помещать полные программы Bash в каталоги cron.X, я устанавливаю их в каталог /usr/local/bin, что позволяет мне легко запускать их из командной строки. Затем я добавляю символическую ссылку в соответствующий каталог cron, например /etc/cron.daily.
Программа anacron не предназначена для запуска программ в определенное время. Скорее, он предназначен для запуска программ с интервалами, которые начинаются в указанное время, например, в 3 часа ночи (см. строку START_HOURS_RANGE в сценарии чуть выше) каждого дня, в воскресенье (в начале недели) и в первый день. месяца. Если какой-либо один или несколько циклов пропущены, anacron запустит пропущенные задания один раз как можно скорее.
Ярлыки
Файл /etc/anacrontab, показанный выше, показывает нам, как мы можем использовать ярлыки для нескольких конкретных и распространенных случаев. Эти сокращения времени, состоящие из одного слова, можно использовать для замены пяти полей, обычно используемых для указания времени. Символ @ используется для обозначения ярлыков для cron. Список ниже, взятый из справочной страницы crontab(5), показывает ярлыки с их эквивалентными значениями.
- @reboot : однократный запуск после перезагрузки.
- @yearly : запускать раз в год, т.е. 0 0 1 1 *
- @annually : запускать раз в год, т.е. 0 0 1 1 *
- @monthly : запускать раз в месяц, т.е. 0 0 1 * *
- @weekly : запуск раз в неделю, т.е. 0 0 * * 0
- @daily : запускать один раз в день, т.е. 0 0 * * *
- @hourly : запуск раз в час, т.е. 0 * * * *
Эти ярлыки можно использовать в любых файлах crontab, например в /etc/cron.d.
Подробнее об установке ограничений
Большинство этих методов я использую для планирования выполнения задач на своих компьютерах. Все эти задачи должны выполняться с привилегиями root. По моему опыту, обычные пользователи редко нуждаются в работе cron. Одним из случаев был пользователь-разработчик, которому понадобилось задание cron, чтобы запустить ежедневную компиляцию в лаборатории разработки.
Важно ограничить доступ к функциям cron для пользователей без полномочий root. Однако бывают случаи, когда пользователю нужно настроить выполнение задачи в заранее заданное время, и cron может позволить ему это сделать. Многие пользователи не понимают, как правильно настроить эти задачи с помощью cron, и допускают ошибки. Эти ошибки могут быть безобидными, но чаще всего они могут вызвать проблемы. Установив функциональные политики, которые заставляют пользователей взаимодействовать с системным администратором, вероятность того, что отдельные задания cron будут мешать другим пользователям и другим системным функциям, снизится.
Можно установить ограничения на общие ресурсы, которые могут быть выделены отдельным пользователям или группам, но об этом в другой раз.
Дополнительную информацию можно найти на справочных страницах для cron, crontab, anacron, anacrontab и run-parts, где содержится отличная информация и описания того, как работает система cron.
Эта статья была первоначально опубликована в ноябре 2017 года и обновлена, чтобы включить дополнительную информацию.
Читайте также: