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; доступ контролируется файлами и

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 - это новая система cron, разработанная с учетом безопасности ее работы. Чтобы добиться этого, система поделена на несколько отдельных программ, каждая из которых отвечает за отдельное задание, со строго контролируемым сообщением между ними. Пользовательский интерфейс представляет собой несущественное изменение интерфейсов для подобных систем (таких как vixie-cron), но внутренние части программы сильно отличаются. Чтобы получить больше информации, проконсультируйтесь с главной страницей bcron по адресу http://untroubled.org/bcron/.

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


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

Anacron
Anacron - это не программа-демон, это то, что работает в объединении с ней. Он выполняет команды по интервалам, указанным по дням, и не предполагат непрерывную работу системы; он запускает работы, которые были пропущены, пока система была отключена. 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, Вам надо отредактировать и. Наиболее безопасный способ - сперва запретить всех в файле, а затем явно разрешить пользователей в.

Разрешения в fcron.deny

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

Разрешения в fcron.allow

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

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

Разрешения в /etc/cron.allow

Планирование заданий 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, давайте сначала отредактируем файл заново, чтобы он принял следующий вид:

Настоящий crontab

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

Now let's say that you also want to add  to your daily schedule. You could do this by first editing and then using   just as we did before, or you could use the proper edit command from the table above. This gives you a way to edit your user's crontab in situ, without depending on external files like.

That should open your user's crontab with an editor. We want to have  run every day at 6:30 A.M., so we'll make it look something like this:

A real crontab

Again, check the cron-jobs list as we did in the previous examples to make sure the jobs are scheduled. If they are all there, then you're all set.

Using cronbase
As mentioned earlier, all of the available cron packages depend on. The cronbase package creates, and a script called. You might have noticed that the default contains something like this:

Default system crontab

To avoid going into much detail, we can just assume that these commands will effectively run your hourly, daily, weekly and monthly scripts. This method of scheduling cron-jobs has some important advantages:


 * They will run even if your computer was off when they were scheduled to run
 * It is easy for package maintainers to place scripts in those well defined places
 * You know exactly where your cron-jobs and your crontab are stored, making it easy for you to backup and restore this part of your system

Final Notes
Remember, each cron package is different and the range of features varies greatly. Be sure to consult the man pages for crontab, fcrontab or anacrontab, depending on what you use.

Good luck!

Troubleshooting
If you're having problems getting cron to work properly, you might want to go through this quick checklist.

Is cron running?
Run  and make sure it shows up!

Is cron working?
Try the following:

crontab to see if cron is running

Then check if is modified periodically.

Is your command working?
Same as before, but perhaps redirect the standard error output as well:

crontab to verify application runs

Can cron run your job?
Check the cron log, usually or  for errors

Are there any s?
cron usually sends mail when there's a problem; check your mail and also look for.

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Eric Brown
 * Xavier Neys
 * nightmorph