Процесс crond — есть. |
Самый популярный сервис, который обеспечивает все нужные возможности по автоматическому запуску программ — это Cron. Большинство провайдеров на серьезных тарифных планах предлагают его использование своим клиентам.
Cron*'ом называют демон, выполняющий запланированные задачи. То, что в различных Unix-системах (FreeBSD, разные версии Linux) называется Cron'ом, пользователи Windows привыкли называть sheduler'ом (назначенные задания). Если доступ к Cron'у вам предлагает хостер (на тарифных планах виртуального хостинга), то подробности того, как настраивать выполнение различных задач, вы можете узнать в соответствующем разделе справки. Как правило, вы можете выбрать для запуска определенные приложения, задать их параметры, периодичность (или срок выполнения, в том случае если вам надо выполнить задачу однократно) и все — в назначенный срок все должно будет сработать. В том случае если хостинг-провайдер обеспечивает вам возможность правки расписаний (crontab*) через SSH, это может быть более удобным, чем использование предоставляемого веб-интерфейса в административном разделе управления сайтом. Если ваш тарифный план допускает использование SSH*, вы можете, используя SSH-клиент (одним из лучших является WinSCP2), править crontab'ы на сервере провайдера так, как если бы вы их редактировали на своем компьютере через обычный shell.
Демон — программа, запускаемая при загрузке операционной системы Unix и ее производных. Аббревиатура Daemon происходит от «Disk and execution monitor»Круг задач, который может (и должен, у хорошего вебмастера) выполнять Cron, весьма широк:
- Индексация. При использовании поиска на сайте периодически необходимо проводить подсчет индекса. Ничего лучше, чем Cron, для этих целей придумать невозможно.
- Синхронизация времени. Опять же — рутинная задача, легко выполняемая Cron'ом в автоматическом режиме. Функция эта необходима для самых различных серверов. Дело в том, что точное время необходимо при использовании различных биллинговых систем — зачастую стоимость различных услуг (телефонные разговоры, доступ в Интернет) зависит от времени суток. Неточно выставленное время на биллинговом сервере может стать источником многочисленных жалоб клиентов.
- Выполнение различных отложенных действий: публикация материалов, рассылка.
Как все это работает? Работает Cron просто — это предустановленный сервис, беспокоиться об его установке не нужно. Крайне редки случаи, когда он или не установлен или вместо Cron'a используется какая-либо другая программа. Даже в версиях Linux, предназначенных для домашнего пользователя, Cron присутствует. Причем не только для того, чтобы пользователь мог расписать выполнение каких-то нужных ему событий, но и для выполнения различных системных задач — к примеру, дефрагментации жесткого диска.
Непосредственная работа выглядит так: Cron запускается из /etc/rc или /etc/rc.local. После запуска он обращается к /var/spool/cron, где считывает так называемый crontab-файл, с тем же названием, что и ваш логин, указанный в /etc/passwd. Также Cron ищет файлы в каталогах /etc/crontab и /etc/cron.d/. Все найденные crontab'ы загружаются в память. Затем, каждую минуту, Cron проверяет все crontab'ы и выполняет в них те команды, которые должны быть выполнены в данную минуту. Если при выполнении команды она выдала какие-либо данные, они будут отправлены Cron'ом или пользователю, создавшему crontab, или пользователю, чей адрес указан в переменной MAILTO crontab'а.
Естественно, возникает необходимость отслеживать изменения в списке заданий, поэтому, также раз в минуту, Cron проверяет дату и время последних изменений в каталогах с crontab'ами и, если где либо она отличается от начальной, ищет файлы, время модификации которых также отличается от исходного, после чего перезагружает их в память. Перезагрузка свежих crontab'ов осуществляется независимо от того, менялся ли фактически файл, или нет — отслеживается только время изменения.
Crontab — это не только файлы, но и команда для редактирования crontab-файловИзменение crontab-файлов осуществляется с помощью команды CRONTAB. Если в shell ввести команду:
crontab -e
то в редакторе, указанном в переменной окружения VISUAL или EDITOR, будет запущен на редактирование пользовательский crontab-файл. После того как вы завершите редактирование и выйдете из редактора, обновленный crontab-файл будет автоматически записан на место старого файла. Для того чтобы отредактировать crontab другого пользователя, надо ввести в shell следующее (вы должны иметь права уровня root):
crontab -u логин_пользователя -e
Итог выполнения будет практически тот же самый, но редактироваться будет уже файл пользователя, чей логин будет указан вслед за параметром -u.
У команды crontab, помимо ключа -e, вызывающего редактор, указанный в переменных окружения, есть ключи -l (обеспечивает обычный вывод crontab-файла на экран) и -r (удаляет текущий crontab-файл).
Содержимое crontab-файлов вполне понятно любому пользователю. По сути, в них указывается для Cron'a следующая инструкция: "сделай то-то и то-то в указанное время указанного дня".
Если вы хотите написать комментарий в crontab'e — начните строку с символа "#"
В crontab'ах игнорируются пустые строки и лидирующие пробелы в строках. Строки с комментариями начинаются с символа "#". Они также игнорируются Cron'ом. Комментарии не могут находиться на той же строке, что и команды Cron'а, так как они могут быть приняты Cron'ом за часть инструкций, указанных в crontab-файле. В итоге Cron обрабатывает только те строки, где содержатся команды для выполнения и устанавливаются переменные окружения.
Переменные окружения описываются в crontab-файлах в соответствии со следующим синтаксисом:
имя_переменной = значение
пробелы вокруг знака "=" необязательны. Все лишние пробелы будут считаться частью значения переменной. Чтобы исключить такие трудноотлавливаемые ошибки, можно заключать правую часть в кавычки. Автоматически определяются следующие переменные: LOGNAME, HOME и SHELL. В дополнение к ним можно задать переменную MAILTO — это адрес, на который будут отправляться отчеты выполняемых программ. MAILTO задавать не обязательно.
Команды задаются следующим образом:
минута час дата месяц день_недели логин команда
соответствующие поля могут принимать следующие значения:
- минута: 0-59
- час: 0-23
- дата: 1-31
- месяц: 1-12
- день_недели: 0-7
При написании crontab-файлов можно использовать диапазоны и списки. Например, введя в графе «дата» 1,2,3,6-9 вы скажете Cron'у, что задача должна выполняться первого, второго, третьего и с шестого по девятое числа месяца. Если задача должна выполняться ежечасно, достаточно ввести вместо часа "*". К примеру:
0 * * * 1 mail -s «Test»
Ежечасно, по понедельникам, Cron будет отправлять на адрес указанный в переменной MAILTO письмо с текстом «Test». Если единицу заменить звездочкой, то присылать письма Cron будет не только по понедельникам, но и по всем остальным дням недели.
Разумеется, тестовой отсылкой почты возможности Cron'а не ограничиваются. Как уже говорилось выше, круг задач, для выполнения которых может быть использован cron, весьма обширен. Но именно к Cron'у относится только задание времени — что достаточно легко делать, поскольку структура crontab-файлов проста и логична. Самое же главное при использовании Cron'а — это не забывать проверять, имеете ли вы права доступа на выполнение запланированных операций, и если да (это легко можно проверить тестовым прогоном) — Cron вас не подведет.
Ссылки по теме
Статья получена: hostinfo.ru