Cron/ru

Это руководство описывает установку и использование cron.

Что делает cron?
Cron - это программа-демон, запускающая запланированные задания, основываясь на результате работы команды. Она выполняет эти задания просыпаясь каждую минуту и проверяя, есть ли какие-нибудь задания cron (cron-jobs) для запуска в каком-либо из файлов заданий crontab пользователя.

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

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

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

Vixie cron
Vixie cron - это полноценная реализация программы cron, основанная на SysV cron. Каждый пользователь имеет свой собственный файл заданий crontab, и ему разрешается указывать переменные среды внутри этого файла. В отличие от других видов cron, он также предлагает поддержку SELinux и PAM. Он поддерживает меньшее количество архитектур чем Dcron, но большее по сравнению с Fcron.

Особенности  :


 * Поддержка SELinux
 * Поддержка PAM
 * Установка переменных среды в файлах заданий crontabs (PATH, SHELL, HOME, etc.)
 * Каждый пользователь может иметь свой собственный файл заданий crontab; доступ контролируется файлами и

cronie
Cronie (sys-process/cronie) is a fork of vixie-cron done by fedora. Because of it being a fork it has the same feature set the original vixie-cron provides. Additionally cronie comes with an anacron implementation which must be enabled through the anacron USE flag.

Dillon's Cron
Dcron стремится быть простой, элегантной и безопасной реализацией программы cron. Он не разрешает установку переменных среды в файлах crontabs и все задания cron запускаются из. Как и Vixie cron, каждый пользователь имеет свой собственный файл заданий crontab.

Особенности  :


 * Быстрый, простой и свободный от излишних функций
 * Доступ к файлу  ограничен группой cron, т.е. он не полагается на внешние средства

Fcron
Fcron ориентирован на то, чтобы заменить собой Vixie cron и Anacron. Он разработан для работы на системах, которые не работают непрерывно и включает в себя дополнительные особенности. Он имеет ограничения на запуск заданий, управление сериализацией работ, возможность назначить работам приятные в обращении значения и возможность запланировать запуск работ при загрузке системы. Просмотрите главную страницу fcron, чтобы получить больше информации.

Особенности  :


 * Разработан для работы на системах, которые не работают непрерывно, т.е. он может запустить задание после перезапуска, если оно было пропущено
 * Установка переменных среды и множества других параметров в файлах заданий crontab
 * Каждый пользователь может иметь свой собственный файл заданий crontab, доступ к которому контролируется файлами cron.allow и cron.deny
 * Улучшенный синтаксис crontab с поддержкой множества других особенностей

bcron
Bcron is a new cron system designed with secure operations in mind. To do this, the system is divided into several separate programs, each responsible for a separate task, with strictly controlled communications between them. The user interface is a drop-in replacement for similar systems (such as vixie-cron), but the internals differ greatly. For more information, see the bcron homepage at http://untroubled.org/bcron.

Особенности  :


 * Легкая замена vixie-cron
 * Ориентированность на множество процессов
 * Нативная поддержка перехода на летнее время

Anacron
Anacron - это не демон cron, это то, что работает в объединении с ним. Он выполняет команды по интервалам, указанным по дням, и не предполагает непрерывную работу системы; он запускает работы, которые были пропущены, пока система была отключена. Anacron обычно полагается на демон cron, чтобы запускаться каждый день.

Установка
Выберите реализацию cron, которая Вам больше нравится, и установите ее командой emerge.

Опционально, если Вы не устанавливали Fcron, Вы можете также пожелать установить Anacron.

Системный файл crontab
Постустановочные сообщения некоторых из этих пакетов cron могут сообщить чтобы Вы запустили. Файл - это системный crontab. Установка cron может использовать его вместе с  для запуск сценариев в. Заметьте, что только Vixie-cron планирует задания в автоматически. Пользователям Dcron и Fcron потребуется запускать  каждый раз при внесении изменений в.

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

Конечно, Вы можете не использовать какой-либо системный файл crontab вовсе, по вашему выбору. Если Вы выбрали Dcron или Fcron, не запускайте. Если Вы выбрали vixie-cron или bcron, вы можете закомментировать строчки в.

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

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

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

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

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

Если Вы выбрали Vixie cron, Вам, возможно, нужно просто отредактировать.

Например, если Вы хотите разрешить доступ пользователю wepy, Вам нужно добавить его в как показано ниже:

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

Хотя, перед тем как мы сможем использовать какие-либо из этих команд, Вам сперва нужно понять работу самого crontab. В каждой строке файла crontab нужно указать пять полей, связанных со временем выполнения заданий в следующем порядке: минуты (0-59), часы (0-23), дни месяца (1-31), месяцы (1-12), и дни недели (0-7, Понедельник - 1, Воскресенье - 0 и 7). Дни недели и месяцы могут быть указаны трехбуквенными сокращениями, например mon,tue,jan,feb, и т.д. Каждое поле также может указывать диапазон значений (напр. 1-5 или mon-fri), список значений, разделенный запятыми (напр. 1,2,3 или mon,tue,wed) или диапазон значений с шагом (напр. 1-6/2 как 1,3,5).

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

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

Теперь мы можем добавить этот crontab в систему с помощью команды Новый crontab из таблицы выше.

Чтобы проверить запланированные задачи cron, мы используем соответственную команду Перечислить cron-jobs из таблицы выше.

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

Этот файл заданий crontab должен выводить "Мне нравится cron в самом деле" каждую минуту каждый час каждого дня каждого второго месяца. Очевидно, Вам следует это делать только если Вы любите cron в самом деле. Этот crontab также выведет "Мне нравится cron немного" в 16:30 каждый день в Январе и Феврале. Он также будет выводить "Мне действительно не нравится cron" в 3:10 1-го Января.

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

Пользователи Anacron, возможно, захотят отредактировать. Этот файл имеет четыре поля: количество дней перед каждым запуском, задержка в минутах после которой он запускает задания, имя задания, и команда для запуска.

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

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

Редактирование crontabs
Все же, давайте будем реалистами; Вы не хотите, чтобы система сообщала Вам как сильно Вы любите cron каждую минуту. Как шаг вперед, давайте удалим этот crontab, используя соответствующую команду Удалить crontab из таблицы выше. Мы также перечислим задания cron после этого, чтобы убедиться что оно работает.

Вы должны увидеть no cron jobs в качестве результата работы команды. Если Вы видите перечисленные задания, это значит, что мы не смогли удалить crontab, и что Вам придется удостовериться, что Вы использовали правильную команду Удалить из своего пакета cron.

Теперь, когда мы можем начать с чистого листа, давайте поместим что-нибудь полезное в файл crontab принадлежащий root. Большинство пожелает запускать команду  еженедельно, чтобы убедиться, что   работает как надо. Чтобы добавить это в crontab, давайте сначала отредактируем файл заново, чтобы он принял следующий вид:

Это заставит cron запускать updatedb в 2:22 A.M. утром в понедельник каждую неделю. Теперь, вы должны ввести этот crontab с помощью команды Новый crontab из таблицы выше, и проверить список снова.

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

Это должно открыть Ваш пользовательский crontab с помощью редактора. Мы хотим, чтобы команда  работала каждый день в 6:30 A.M., поэтому мы придадим ей следующий вид:

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

Использование cronbase
Как упомянуто ранее, все доступные пакеты cron зависят от. Пакет cronbase создает, и сценарий, называемый. Вы можете заметить, что по умолчанию содержит что-то в этом роде:

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


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

Использование anacron
Как было упомянуто ранее, anacron используется на системах, не предназначенных для непрерывной работы (подобно большинству настольных компьютеров). Его файл конфигурации по умолчанию,, обычно выглядит так:

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

В заключение, важно закомментировать какие-либо совпадающие записи в любом другом cron, установленном на системе, так, как в следующем примере с vixie crontab:

Без этого, части daily, weekly и monthly будут выполняться - в разное время - как демоном cron, так и anacron, приводя к возможным повторениям выполнения работ.

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

Удачи!

Устранение проблем
Если у Вас проблемы с нормальной работой cron, вы можете просмотреть этот быстрый проверочный список.

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

Cron работает?
Попробуйте следующее:

Затем проверьте модифицируется ли файл периодически.

Работает ли Ваша команда?
То же самое, что и раньше, но также перенаправьте стандартный вывод ошибок:

Может ли cron запустить Ваше задание
Проверьте лог-файл cron, обычно или, на ошибки

Появляются ли какие-нибудь файлы
Cron обычно отправляет сообщение в случае проблемы; проверьте Ваш mail и также файл.

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


 * Eric Brown
 * Xavier Neys
 * nightmorph