2011-2017 © МБУЗ ГКП № 7, г.Челябинск.
Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. Это очень удобно, вы просто запускаете скрипт, и он делает все что необходимо без вашего вмешательства. Следующий шаг в этом пути - настроить автоматически запуск нужного скрипта в нужное время.
Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.
Содержание статьи:
Фактически, Cron - это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:
В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.
Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
crontab -e
Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа '*'. Этот символ означает, что нужно выполнять каждый раз, если в первом поле - то каждую минуту и так далее. Ну а теперь перейдем к примерам.
Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
crontab -l
Вы можете удалить все существующие задачи командой -r:
crontab -r
Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример - запускать его каждую минуту:
* * * * * /usr/local/bin/serve
Далее, усложним, будем запускать каждый час, в нулевую минуту:
0 * * * * /usr/local/bin/serve
Еще дальше:
Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
0 0 * * * /usr/local/bin/serve
Если идти так дальше, то можно запускать в первый день каждого месяца:
0 0 1 * * /usr/local/bin/serve
Можно в любой день, например, 15 числа:
0 0 15 * * /usr/local/bin/serve
В первый день недели первого месяца года, 0 часов 0 минут:
0 0 * 1 0 /usr/local/bin/serve
Или в нулевой день недели каждого месяца:
0 0 * * 0 /usr/local/bin/serve
Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
30 15 * * 2 /usr/local/bin/serve
Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:
30 15 * * sun /usr/local/bin/serve
Для того чтобы указать определенный интервал нужно использовать символ "-", например, каждый час, с семи утра до семи вечера:
0 7-19 * * * /usr/local/bin/serve
Если нужно запустить команду несколько раз, можно использовать разделитель ",". Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
5,35 16 * * * /usr/local/bin/serve
Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта - "/":
*/10 * * * * /usr/local/bin/serve
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
@hourly /usr/local/bin/serve
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
sudo vi /etc/corn.daily/basckup
#!/bin/bash
......
Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.
После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:
Она должна выполняться в 19.40 каждый день, теперь смотрим лог:
grep CRON /var/log/syslog
И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.
Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:
sudo run-paths /etc/cron.daily/
Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.
В этой статье мы рассмотрели как выполняется настройка cron для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.
Системная утилита cron может использоваться для планирования автоматического запуска программ с заданными интервалами.
Опытные пользователимогут использовать cron через оболочку Unix или Центр управления учетными записями (ACC), чтобы легко настроить и поддерживать расписание запуска программ.
Обратите внимание, что вы не должны использовать как оболочку Unix, так и ACC для управления cron . Если вы внесете изменения в cron через оболочку Unix, все будущие изменения этой команды cron не будут отображаться в интерфейсе ACC cron.Любые попытки изменить команду в ACC не вступят в силу.
Cron - это стандартная утилита Unix, которая используется для планирования команд для автоматического выполнения через определенные промежутки времени. Например, у вас может быть скрипт, который генерирует веб-статистику, которую вы хотите запускать один раз в день автоматически в 5:00.
Команды, включающие cron, называются «заданиями cron».
ACC имеет встроенный интерфейс для cron.Мы рекомендуем всем клиентам использовать интерфейс cron ACC, хотя опытные пользователи могут использовать cron вручную.
Чтобы найти интерфейс cron ACC, выполните следующие действия:
Это приведет вас к интерфейсу Crontab Configuration , где вы сможете создавать, редактировать и удалять задания cron.
Таблица внизу страницы содержит настроенные в настоящий момент задания cron.
Вы можете добавить задание cron напрямую со страницы Конфигурация Crontab .
Выполните следующие действия:
Мы рекомендуем планировать задания cron в разное время, чтобы предотвратить их снижение.
Команда для запуска | Эта команда запускает задание cron автоматически. Рекомендуется указать полный путь к файлу для команды. Смотрите эту заметку для получения дополнительной информации. Например, команды cron см. В разделе «Примеры команд Cron». |
Частота | Определяет, как часто будет выполняться задание cron. |
День месяца / День недели / Интервал | День или период времени, когда будет выполняться задание cron. Этот раздел будет меняться в зависимости от выбранной частоты |
Время дня | Конкретное время выполнения задания cron. Обратите внимание, что указанное время составляет EST . Этот раздел используется только с Один раз в месяц , Один раз в неделю и Один раз в день частоты |
Важно понимать, что наши серверы настроены на восточный часовой пояс. Этот параметр может повлиять на работу cron в летнее время. В Соединенных Штатах летнее время начинается в 2 часа утра.М. Во второе воскресенье марта и заканчивается 2 мск. в первое воскресенье ноября.
Если вы установите задание cron для выполнения в «промежуток» времени перехода на летнее время (между 2 и 3 часами утра), задание cron не запустится, когда начнется переход на летнее время, и время переместится на час вперед. Кроме того, если у вас есть задание cron, которое будет запущено в «промежуток» времени перехода на летнее время и DST завершится, задание cron будет выполнено дважды.
Если произошли какие-либо ошибки, Центр контроля учетных записей немедленно уведомит вас и даст возможность исправить их.
После добавления задания вы увидите его в списке в таблице на странице Конфигурация Crontab .
Вы можете редактировать или удалять существующие задания cron из Crontab Configuration , стр. . Все ваши задания cron будут перечислены в таблице внизу страницы.
Чтобы отредактировать задание cron, найдите ссылку на команду в столбце Command и щелкните по ней.
Нажав на ссылку команды задания, вы попадете на страницу управления заданием cron.С этого возраста вы можете редактировать работу или удалить ее полностью.
Находясь на странице управления заданием cron, вы можете редактировать задание, изменив команду, указанную рядом с Команда . Когда закончите, нажмите Изменить команду .
Это немедленно изменит задание cron. Когда запланировано выполнение задания cron, будет запущена новая команда.
Вы можете удалить работу, нажав кнопку Удалить работу .
Это навсегда удалит задание cron.
Чтобы использовать cron вручную, вы должны сначала настроить файл записей cron. Этот файл может быть размещен в любом месте вашей учетной записи и может иметь любое имя файла (хотя crontab.txt является хорошим выбором).
Он должен содержать одну запись для каждого задания, которое вы планируете.
Инструкции по созданию файла с помощью команд Unix см. В разделе «Как создать новый файл» статьи «Основы Unix».
Запись cron выглядит примерно так:
30 3 * * * / usr / bin / nice /usr/home/username/script.pl
В этом случае script.pl будет выполняться ночью в 3:30.
/ usr / bin / nice использует системную команду nice для уменьшения влияния вызова на сервер. Мы рекомендуем вам использовать его со всеми заданиями cron, чтобы наилучшим образом сохранить системные ресурсы.
/usr/home/username/script.pl - это полный путь к скрипту / программе, которую вы хотите запустить cron.
Вы также можете использовать обычные команды Unix, используя полный путь к программам. Например, у вас может быть следующая команда для удаления всех файлов из некоторого временного каталога:
30 3 * * * / usr / bin / nice / bin / rm -f / usr / home / имя пользователя / temp / *
"30 3 * * *" в примере требует немного большего объяснения:
30 3 * * * / usr / bin / nice / bin / rm -f / usr / home / имя пользователя / temp / *
Время выполнения команды cron контролируется 5 числами, предшествующими вызову программы.
Звездочка (*) соответствует всем возможностям. Например, в данном примере скрипт выполняется каждый день, потому что звездочки для дня месяца, дня недели и месяца года соответствуют всем значениям.
Несколько значений разделяются запятыми. Например, вы можете начать с «15 1,3,5 * * *», чтобы запускать сценарий каждый день в 1:15, 3:15 и 5:15.
Обратите внимание, что наши правила запрещают запуск программы через cron чаще, чем раз в час.
Когда у вас есть файл директории cron в вашей учетной записи, вы должны подключиться через SSH и выполнить команду:
crontab crontab.txt
Замените crontab.txt на фактическое имя файла, содержащего ваши записи cron.
Обратите внимание, что вы должны находиться в том же каталоге, что и файл cron в то время.
После этого ваша задача cron должна быть активирована.Если программы, запущенные через cron, генерируют ошибки, демон cron отправит их по электронной почте в вашу учетную запись.
Если вы хотите изменить какое-либо из ваших заданий cron, просто отредактируйте ваш файл и снова запустите команду crontab, как показано выше.
Ниже приведены команды, которые вы можете использовать для резервного копирования файлов вашего сайта. Эти команды могут использоваться в команде интерфейса ACC cron для запуска поля или при создании заданий cron вручную.
Обязательно укажите полный путь к каждой программе, используемой в задании cron.
Например, чтобы использовать Unix-команду «cat», вы должны использовать «/ bin / cat» вместо просто «cat».
В другом примере вы можете запустить скрипт в вашем домашнем каталоге, используя:
$ HOME / script.pl
Имейте в виду, что когда вы запускаете пользовательский скрипт, он должен быть помечен как исполняемый, иначе задание cron не будет выполнено.
Чтобы создать резервную копию вашего домашнего каталога (и исключить каталоги «www_logs» и «backup»), используйте следующую команду:
/ usr / bin / tar czf / USR / дома / имя пользователя / резервное копирование / дома.`/ Bin / дата + \% Y \% m \% d`.tar.gz --exclude www_logs --exclude резервное копирование / usr / home / имя пользователя
Замените «username» на ваше имя пользователя Pair Networks.
Для учетных записей с отдельным каталогом public_html (как правило, учетными записями, созданными до 1 июня 2011 г.), каталог public_html можно создать с помощью:
/ usr / bin / tar czf / USR / дома / имя пользователя / резервное копирование / веб.`/ Bin / дата + \% Y \% м \% d`.tar.gz / usr / www / users / username
Замените «имя пользователя» на имя пользователя вашей сети.
Для резервного копирования вашего каталога public_ftp:
/ usr / bin / tar czf / usr / bin / tar czf /usr/home/username/backup/ftp.`/bin/date + \% Y \% m \% d`.tar.gz / usr / public_ftp / username
Замените «username» на ваше имя пользователя Pair Networks.
Для резервного копирования ваших веб-журналов:
/ usr / bin / tar czf / USR / дома / имя пользователя / резервное копирование / журналы.`/ Bin / дата + \% Y \% m \% d`.tar.gz / usr / home / username / www_logs
Замените «username» на ваше имя пользователя Pair Networks.
Для резервного копирования конкретной базы данных см. Наши учебные пособия по настройке автоматического резервного копирования:
Можно запускать сценарии PHP через задание cron. Для этого есть три варианта:
Один из вариантов запуска сценариев PHP через задания cron - изменить начальную строку кода на полный путь к CGI-копии PHP.
Например, начальную строку кода Php можно изменить на:
#! / Usr / www / cgi-bin / php7.cgi -q
Файл может быть вызван с полным путем к файлу.
Другой способ запуска сценариев PHP в командной строке - сначала вызвать PHP CLI и указать путь к коду PHP, который вы хотите запустить.
Например, вы также можете использовать путь:
/ usr / local / bin / php / path / to / PHP_SOURCE_FILE
В этом примере вы должны изменить "/ path / to /" на фактический путь к файлу PHP, а PHP_SOURCE_FILE - на имя файла кода PHP.
По умолчанию / usr / local / bin / php теперь PHP 7.1. Но есть и другие версии, такие как PHP 5.6 в / usr / local / bin / php56 или PHP 7.3 в / usr / local / bin / php73.
Пользователи могут запустить следующую команду, чтобы увидеть все доступные версии PHP:
ls / usr / local / binphp *
Третий вариант - вызвать программу наподобие wget по URL-адресу скрипта PHP, чтобы запустить его через PHP.
/ usr / local / bin / wget -q -O - http: // yourdomain.com / wp-cron.php? working_wp_cron> / dev / null 2> & 1
-q означает «тихий»; отключает вывод wget.
-O - сообщает wget записать на стандартный вывод
> / dev / null перенаправляет стандартный вывод в / dev / null
2> & 1 перенаправляет стандартную ошибку на стандартный вывод, который был перенаправлен на / dev / null
Использование cron в наших системах регулируется нашей опубликованной политикой использования cron.Пожалуйста, ознакомьтесь с этой политикой перед настройкой любых заданий cron.
,Примечание:
В большинстве систем вы должны получить разрешение от системный администратор, прежде чем вы сможете отправить хрон. На некоторых общих системах, потому что есть только один файл crontab, только администратор имеет доступ к crontab
команда.
Для получения информации об использовании cron на вашем Учетная запись Webserve, см. В АРХИВЕ: Cron: Расписание заданий на WW-серверах IU.
Демон cron - это длительный процесс который выполняет команды в определенные даты и время. Вы можете использовать это планировать мероприятия как разовые или повторяющиеся задачи.
Чтобы запланировать одноразовые задачи с помощью cron, используйте в
или в пакетном режиме
.Для большего, см. В АРХИВЕ: В Unix, что такое команды at и batch, и как их использовать для отправки неинтерактивных запросов на работу?
Для команд, которые должны выполняться многократно (например, ежечасно, ежедневно, или еженедельно), вы можете использовать команду crontab
. crontab
команда создает файл crontab, содержащий команды и инструкции для демона cron для выполнения. Вы можно использовать команду crontab
со следующими параметрами:
crontab -a имя файла | Установить |
crontab -e | Отредактируйте файл crontab или создайте его, если он еще не существует. |
crontab -l | Покажите ваш файл crontab. |
crontab -r | Удалите файл crontab. |
crontab -v | Показать последний раз, когда вы редактировали файл crontab. (Этот вариант доступно только в нескольких системах.) |
crontab -u пользователь | Используется в сочетании с другими опциями, эта опция позволяет изменить или просмотреть файл crontab |
Каждая запись в файле crontab состоит из шести полей, указывающих на следующий заказ:
минут (ы) час (ы) день (ы) месяц (ы) будний день (ы) команда (ы)
Поля разделены пробелами или символами табуляции. Первые пять целые шаблоны и шестая команда для выполнения. Следующая таблица кратко описывает каждое из полей:
Поле | Значение | Описание |
---|---|---|
минута | 0-59 | Точная минута выполнения последовательности команд |
час | 0-23 | Час дня, когда выполняется последовательность команд |
день | 1-31 | День месяца, в который выполняется последовательность команд |
месяц | 1-12 | Месяц года, в который выполняется последовательность команд |
будний день | 0-6 | День недели, в который выполняется последовательность команд (воскресенье = 0, понедельник = 1, вторник = 2 и т. Д.) |
команда | Специальный | Полная последовательность команд для выполнения.Командная строка должен соответствовать синтаксису оболочки Bourne. Команды, исполняемые файлы (например, скрипты) или их комбинации. |
Каждый из шаблонов из первых пяти полей может быть *
(звездочка), что означает все допустимые значения или список элементов, разделенных запятыми. Элемент является либо числом, либо включающий диапазон, обозначенный двумя числами, разделенными минусом знак (э.г., , 10-12,
). Вы можете указать дни с двумя полями: день месяца и день недели. Если вы укажете оба из них как список элементов, Cron будет наблюдать их обоих, например:
0 0 1,15 * 1 / mydir / myprogram
Демон cron запустит программу myprogram
в каталоге mydir
на первое и пятнадцатое числа каждого месяца, а также каждый понедельник. к указать дни только одним полем, другое поле должно быть установлено на *
, например:
0 0 * * 1 / mydir / myprogram
В приведенном выше примере программа будет работать только по понедельникам.
Если задание cron, указанное в вашей записи crontab, выдает какие-либо сообщения об ошибках когда он запустится, вы получите сообщение, сообщающее об ошибках.
Для получения дополнительной информации обратитесь к следующим соответствующим справочным страницам:
человек crontab человек крон человек в человек партия,
В этой статье описывается настройка и использование демонов cron в Gentoo Linux.
Cron - это демон, который запускает запланированные задачи на основе ввода команды crontab. Он выполняет эту задачу, просыпаясь каждую минуту и проверяя, есть ли какие-либо задания cron для выполнения в любом из пользовательских crontabs.
ПримечаниеВ Portage есть несколько реализаций cron на выбор. Все они предлагают похожий интерфейс, а именно использование crontab или аналогичной команды. Существует также связанная утилита под названием Anacron, которая предназначена для работы с cron в системах, которые не работают постоянно.
Все доступные пакеты cron зависят от sys-process / cronbase.Этот пакет технически не зависит ни от одного из пакетов cron, но он предоставляет функциональность, подобную cron, которую может оценить большинство пользователей.
Прежде чем начать работу с cron, необходимо выбрать правильную реализацию cron.
Cronie (sys-process / cronie) - это ветка устаревшего vixie-cron, созданного Fedora, который до сих пор поддерживается.Из-за того, что он является форком, он имеет тот же набор функций, который предоставляет оригинальный vixie-cron. Кроме того, cronie поставляется с реализацией anacron, которая по умолчанию включена через USE-флаг anacron. Помните о различиях в конфигурации, как отмечено в ошибке # 551352, при миграции из другой системы cron. Ожидаемые задания могут вообще не выполняться.
Dcron стремится быть простой, элегантной и безопасной реализацией cron. Он не позволяет задавать переменные окружения в crontabs, и все задания cron запускаются из / bin / sh.Как и vixie-cron, у каждого пользователя есть свой crontab. Начиная с версии 4 он содержит анакроноподобные функции. Последняя версия 4.5 выпущена в мае 2011 года.
Особенности sys-процесса / dcron:
Fcron стремится заменить vixie-cron и анакрон. Он предназначен для работы в системах, которые не работают непрерывно, и имеет множество дополнительных функций.Он имеет ограничения запуска заданий, элементы управления сериализацией заданий, возможность назначать хорошие значения заданиям и возможность планировать задания для запуска при запуске системы. Смотрите домашнюю страницу fcron для получения дополнительной информации. Последние версии были выпущены 3.2.1 в июне 2016 года и 3.3.0 (dev) в августе 2016 года, разработка на GitHub, похоже, прекратилась в июле 2018 года.
Особенности sys-процесса / fcron:
Bcron - это новая система cron, разработанная для обеспечения безопасности операций. Для этого система делится на несколько отдельных программ, каждая из которых отвечает за отдельное задание, с строго контролируемой связью между ними. Пользовательский интерфейс представляет собой замену аналогичным системам (таким как vixie-cron), но внутреннее устройство сильно отличается. Для получения дополнительной информации посетите домашнюю страницу bcron по адресу http://untroubled.org/bcron. Последняя версия 0.11 выпущен в августе 2015 года.
Особенности sys-процесса / bcron:
Anacron - это не демон cron, это то, что обычно работает вместе с ним. Он выполняет команды с интервалами, указанными в днях, и не предполагает, что система работает непрерывно; он будет выполнять задания, которые были пропущены, когда система не работала.Anacron обычно использует демон cron для запуска его каждый день.
Выберите правильную реализацию cron для задания, а затем найдите его:
Убедитесь, что выбранный демон cron был добавлен в процесс инициализации системы; без этого шага демон cron не будет выполнять свою работу.
root #
/etc/init.d/dcron start
root #
rc-update добавить dcron по умолчанию
При желании, если у Fcron или dcron установлено , а не , установка Anacron в качестве помощника демона cron может быть разумным выбором.
root #
emerge --ask anacron
Опять же, не забудьте добавить anacron в процесс инициализации системы.
root #
/etc/init.d/anacron start
root #
rc-update добавить anacron по умолчанию
Для anacron обычно нет процесса инициализации. Вместо этого anacron должен быть запущен через другую реализацию cron.
Один из способов - запустить анакрон через определение cron.По умолчанию он устанавливает почасовой скрипт, который по умолчанию используется большинством реализаций cron. Если это не так, то его можно запустить с помощью ручных определений:
ФАЙЛ / etc / crontab
Запуск анакрона по определению cron
# Запускать анакрон каждые 10 минут * / 10 * * * root / usr / sbin / anacron # В качестве альтернативы, запускайте предоставленный anacron скрипт 0anacron каждый час # 59 * * * * root /etc/cron.hourly/0anacron
Сообщения после установки от некоторых из этих пакетов cron инструктируют пользователя запустить crontab / etc / crontab.Файл / etc / crontab является системным crontab . Установка cron может использовать его вместе с sys-process / cronbase для запуска сценариев в /etc/cron. enjdaily,hourly,weekly,monthly}. Обратите внимание, что только cronie автоматически планирует задания в / etc / crontab. Пользователи Dcron и fcron должны будут запускать crontab / etc / crontab каждый раз, когда они вносят изменения в файл / etc / crontab.
Обратите внимание, что задания, запланированные в системном crontab, могут не отображаться в списке заданий cron, отображаемом при запуске crontab -l./ # / "/ etc / crontab
Чтобы пользователи, кроме root, имели доступ к демону cron, прочитайте этот раздел, в противном случае перейдите к следующему разделу: Планирование заданий cron.
ПримечаниеНезависимо от того, какой пакет cron был выбран, чтобы позволить пользователю использовать crontab, он сначала должен быть в группе cron.Например, чтобы добавить пользователя wepy в прогон группы cron:
root #
gpasswd-wepy cron
Примечание
При добавлении пользователя в группу cron убедитесь, что пользователь вышел из системы и снова вошел в систему, чтобы изменение группы вступило в силу.
При использовании dcron , вышеуказанный шаг - это все, что необходимо для предоставления пользователю доступа к crontab. Пользователи Dcron могут перейти к следующему разделу «Планирование заданий cron», все остальные должны продолжать читать.
При использовании fcron отредактируйте файлы /etc/fcron/fcron.deny и /etc/fcron/fcron.allow. Самый безопасный способ запуска системы - сначала запретить всем пользователям в /etc/fcron/fcron.deny, а затем явно разрешить пользователям в /etc/fcron/fcron.allow.
Важно
Если ни /etc/fcron/fcron.allow, ни /etc/fcron/fcron.deny не существует, то всем пользователям в группе cron будет разрешено использовать crontab. fcron поставляется с fcron.allow по умолчанию, который разрешает всем пользователям в группе cron доступ к fcrontab.
КОД Разрешения в fcron.deny
все
Если пользователь (снова wepy для этого примера) сможет запланировать свои собственные задания cron, то добавьте его в /etc/fcron/fcron.allow следующим образом:
КОД Разрешения в fcron.allow
wepy
Если был выбран cronie , просто отредактируйте файл /etc/cron.allow.
Важно
Важно отметить, что если только / etc / cron.allow существует, тогда только пользователи группы cron, перечисленные там, будут иметь доступ. В противном случае, если существует только пустой /etc/cron.deny, то будут разрешены все пользователи группы cron. Не оставляйте пустой /etc/cron.deny, если не существует файла /etc/cron.allow!
Например, чтобы разрешить доступ пользователю wepy , добавьте его в /etc/cron.allow следующим образом:
КОД Разрешения в /etc/cron.allow
wepy
Процесс редактирования crontabs различен для каждого пакета, но все они поддерживают один и тот же базовый набор команд: добавление и замена crontabs, редактирование crontabs, удаление crontabs и перечисление заданий cron в crontabs.В следующем списке показано, как запускать различные команды для каждого пакета.
Версия | Редактировать crontab | Удалить crontab | Новый crontab | Список cron-вакансий |
---|---|---|---|---|
дкрон | crontab -e | crontab -d [пользователь] | crontab файл | crontab -l |
fcron | fcrontab -e | fcrontab -r [пользователь] | fcrontab , файл | fcrontab -l |
cronie & bcron | crontab -e | crontab -r -u [пользователь] | crontab файл | crontab -l |
Примечание
При использовании команды удаления, если аргумент не указан, удаляется crontab текущего пользователя.
Примечание
Fcron также имеет символическую ссылку с crontab на fcrontab.
Прежде чем использовать любую из этих команд, необходимо сначала понять сам crontab. Каждая строка в crontab определяет пять полей времени в следующем порядке: минуты (0-59), часы (0-23), дни месяца (1-31), месяцы (1-12) и дни неделя (0-7, понедельник - день 1, воскресенье - день 0 и день 7). Дни недели и месяцы можно указывать с помощью трехбуквенных сокращений, таких как понедельник, вторник, январь, февраль и т. Д.Каждое поле также может указывать диапазон значений (например, 1-5 или пн-пт), список значений через запятую (например, 1,2,3 или пн, вт, ср) или диапазон значений с шагом (например, 1-6 / 2 как 1,3,5).
Это звучит немного запутанно, но с несколькими примерами легко увидеть, что это не так сложно, как кажется.
КОД Примеры
# Запускать / bin / false каждую минуту круглый год * * * * * / bin / false # Выполните / bin / false в 1:35 в понедельник, вторник, четверг и четвертое число каждого месяца. 35 1 4 * пн / бен / ложь # Run / bin / true 2 марта в 22:25 25 22 2 3 * / bin / true # Запустите / bin / false в 2:00 каждый понедельник, среду и пятницу 0 2 * * 1-5 / 2 / bin / false
Примечание
Обратите внимание, как указать конкретные дни недели и дни месяца до их объединения.Если * используется только для одного из них, другой имеет приоритет, в то время как * для обоих означает только каждый день.
Чтобы протестировать то, что только что было рассмотрено, выполните шаги по вводу нескольких заданий cron. Сначала создайте файл с именем crons.cron и сделайте так:
ФАЙЛ crons.cron
Создать файл crons.cron
# Мин. Часы Дни Месяцы День недели 10 3 1 1 * / bin / echo "Мне не очень нравится cron" 30 16 * 1,2 * / bin / echo "Мне немного нравится cron" * * * 1-12 / 2 * / bin / echo "Мне очень нравится cron"
Теперь добавьте этот crontab в систему с помощью «новой команды» из таблицы выше.
Примечание
Выходные данные команд echo не будут видны, если не используется перенаправление.
Чтобы проверить запланированные задания cron, используйте правильную команду списка из таблицы выше.
Должен отображаться список, напоминающий crons.cron; если нет, возможно, была введена неправильная команда для ввода crontab.
Этот crontab должен повторять «Мне действительно нравится cron» каждую минуту каждого часа каждого дня, через месяц. Очевидно, что пользователь будет делать это только в том случае, если ему действительно нравится cron.Crontab также будет повторять «Мне немного нравится cron» в 16:30 каждый день в январе и феврале. Это также будет звучать так: «Мне не очень нравится cron» в 3:10 1 января.
При использовании anacron продолжайте читать этот раздел. В противном случае перейдите к следующему разделу Редактирование crontabs.
Пользователи Anacron захотят отредактировать / etc / anacrontab. Этот файл имеет четыре поля: количество дней между каждым запуском, задержка в минутах, после которого он запускается, имя задания и команда для запуска.
Например, чтобы запускать эхо-запрос «Мне нравится анакрон» каждые 5 дней, через 10 минут после запуска анакрона введите следующее:
ФАЙЛ / etc / anacrontab
5 10 тратить время / bin / echo "Мне нравится анакрон"
Anacron завершает работу после завершения всех заданий в anacrontab. Чтобы проверить, нужно ли выполнять эти задания каждый день, будет использоваться демон cron. Инструкции в конце следующего раздела объясняют, как это следует делать.
Будучи реалистичным, ни один пользователь не хотел бы, чтобы его система говорила ему, как сильно они любят cron каждую минуту. В качестве шага вперед удалите предыдущий пример crontab, используя соответствующую команду удаления из таблицы выше. Используйте соответствующую команду list, чтобы просмотреть cron-jobs и убедиться, что она работает.
root #
crontab -d
root #
crontab -l
В выводе crontab -l не должны отображаться задания cron.Если в списке заданий cron, команде удаления не удалось удалить crontab; проверьте правильность команды remove для системного пакета cron.
Теперь, когда у нас есть чистое состояние, давайте поместим что-то полезное в корень корня . Большинство людей захотят запускать updatedb еженедельно, чтобы убедиться, что mlocate работает правильно. Чтобы добавить это в системный файл crontab, сначала снова отредактируйте файл crons.cron, чтобы он выглядел следующим образом:
КОД Настоящий crontab
22 2 * * 1 / usr / bin / updatedb
Это заставило бы cron запускать updatedb в 2:22 A.М. в понедельник утром каждую неделю. Теперь введите crontab с правильной новой командой из таблицы выше, и снова проверьте список.
root #
crontab crons.cron
root #
crontab -l
Теперь давайте предположим, что emerge --sync должен запускаться ежедневно, чтобы поддерживать дерево Portage в актуальном состоянии. Это можно сделать, сначала отредактировав crons.cron, а затем используя crontab crons.cron, как это было сделано в примере выше, или , с помощью правильной команды редактирования из таблицы выше.Это дает возможность редактировать пользовательский crontab на месте, не завися от внешних файлов, таких как crons.cron.
Приведенная выше команда должна открыть crontab пользователя с редактором. Например, если emerge --sync должен запускаться каждый день в 6:30 утра, заставьте crontab выглядеть примерно так:
КОД Настоящий crontab
22 2 * * 1 / usr / bin / updatedb 30 6 * * * / usr / bin / emerge --sync ## (при использовании anacron добавьте эту строку) 30 7 * * * / usr / sbin / anacron -s
Снова, проверьте список заданий cron, как сделано в предыдущих примерах, чтобы убедиться, что задания запланированы.Если они все есть, то система готова к рок-н-роллу.
Как упоминалось ранее, все доступные пакеты cron зависят от sys-process / cronbase. Пакет cronbase создает файл /etc/cron.atellhourly,daily,weekly,monthly} и скрипт, называемый run-crons. Обратите внимание, что файл / etc / crontab по умолчанию содержит что-то вроде этого:
КОД Система по умолчанию crontab
* / 15 * * * * test -x / usr / sbin / run-crons && / usr / sbin / run-crons 0 * * * * rm -f / var / spool / cron / lastrun / cron.почасовой 0 3 * * * rm -f /var/spool/cron/lastrun/cron.daily 15 4 * * 6 rm -f /var/spool/cron/lastrun/cron.weekly 30 5 1 * * rm -f /var/spool/cron/lastrun/cron.monthly
Чтобы не вдаваться в подробности, предположим, что эти команды будут эффективно запускать ежечасные, ежедневные, еженедельные и ежемесячные сценарии. Этот метод планирования заданий cron имеет несколько важных преимуществ:
Как упоминалось ранее, anacron используется в системах, которые не предназначены для непрерывной работы (например, в большинстве настольных систем). Его файл конфигурации по умолчанию, / etc / anacrontab, обычно похож на следующий:
ФАЙЛ / etc / anacrontab
SHELL = / bin / sh PATH = / USR / местные / SBIN: / USR / местные / бен: / SBIN: / бен: / USR / SBIN: / USR / бен # формат: команда идентификатора задания периода задержки 1 5 крон.ежедневные прогоны /etc/cron.daily 7 10 cron.weekly run-parts /etc/cron.weekly 30 15 cron.monthly run-parts /etc/cron.monthly
Основное различие между этим и другими общими crontabs заключается в том, что в anacron нет фиксированной даты / часа для планирования задания, а только период между каждым запуском. Когда запускается anacron, он проверяет содержимое набора файлов в / var / spool / anacron и вычисляет, истек ли срок соответствующей записи в файле конфигурации с момента последнего запуска.Если это так, то команда вызывается снова.
В качестве последнего замечания важно закомментировать любую перекрывающуюся запись в любом другом cron, установленном в системе, например, в следующем примере crontab vixie-cron:
ФАЙЛ / etc / crontab
# для vixie-cron # $ Заголовок: /var/cvsroot/gentoo-x86/sys-process/vixie-cron/files/crontab-3.0.1-r4,v 1.3 2011/09/20 15:13:51 idl0r Exp $ # Глобальные переменные SHELL = / bin / Баш PATH = / SBIN: / бен: / USR / SBIN: / USR / бен MAILTO = корень НАЧАЛО = / # проверять скрипты в cron.ежечасно, cron.daily, cron.weekly и cron.monthly 59 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly # 9 3 * * * root rm -f /var/spool/cron/lastrun/cron.daily # 19 4 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly # 29 5 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly # * / 10 * * * * корневой тест -x / usr / sbin / run-crons && / usr / sbin / run-crons @ Почасовой корень тест! -e /var/spool/cron/lastrun/cron.hourly && touch / var / spool / cron / lastrun / cron.ежечасно && run-parts --report /etc/cron.hourly
Без этого ежедневные, еженедельные и ежемесячные части будут выполняться - в разное время - как демоном cron, так и anacron, что приведет к возможному двойному выполнению задания.
При возникновении проблем с правильной работой cron этот краткий контрольный список может оказаться полезным.
Помните, что каждый пакет cron отличается от других, а спектр его возможностей сильно различается. Обязательно обратитесь к справочным страницам для crontab, fcrontab или anacrontab, в зависимости от того, какой демон cron был активирован!
Чтобы убедиться, что cron запущен, посмотрите, отображается ли он в списке процессов:
Попробуйте следующее:
КОД crontab, чтобы увидеть, работает ли cron
* * * * * / bin / echo "foobar" >> / file_you_own
Затем проверьте, периодически ли изменяется / file_you_own.
То же, что и раньше, но, возможно, также перенаправить стандартный вывод ошибок:
КОД crontab для проверки работоспособности приложения
* * * * * / bin / echo "foobar" >> / file_you_own 2> & 1
Проверьте журнал cron, обычно /var/log/cron.log или / var / log / messages на наличие ошибок.
cron обычно отправляет почту при возникновении проблемы; проверьте почту и поищите создание ~ / dead.файл письма.
Для получения писем от cron должна быть установлена действующая настройка MTA. Это обеспечивается любым пакетом из виртуального / мта.
Если сообщения cron должны отправляться только локально, а не через полностью настроенный почтовый сервер, система может использовать почту mbox (/ var / spool / mail), включив флаг использования mbox с соответствующим пакетом, который предоставляет MTA ,
Некоторые хостинговые компании не разрешают доступ к cron, но можно найти много альтернативных вакансий cron, которые являются бесплатными или коммерчески доступными: