- Что значит слово крон?
Сразу оговорюсь, я против перевода слова cron как крон. И против использования непосредственно cron. Считаю правильным вариант хрон (от греческого chronos - время). В русском языке, кстати, используется именно эта форма (произношение) - хронометр. Со мной согласен и словарь Lingvo, переводящий cron как хрон. Однако здесь народ решил, что лучше использовать слово cron. Ну что ж, да будет так.
- А что значит cron в компьютерном контексте?
Wikipedia говорит о cron следующее:
cron — планировщик задач, демон в Юникс-образных операционных системах для периодического выполнения заданий в заданное время.
Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя. Для редактирования файла crontab используется специальная программа crontab. Это сделано для того, чтобы во время редактирования cron мог продолжать работу.
От себя добавлю, аналог cron`а в Windows - Планировщик заданий.
- Зачем cron Drupal`у?
Для нормального функционирования, некоторые модули требуют периодического технического обслуживания. Например, модулю watchdog надо удалять старые сообщения, а модулю search - индексировать содержимое сайта.
Список модулей ядра, использующих cron:
- aggregator.module
- drupal.module
- node.module
- ping.module
- poll.module
- search.module
- statistics.module
- watchdog.module
Краткий список сторонних модулей, использующих cron:
- db_maintenance.module
- freemind.module
- privatemsg.module
- image.module
- simplenews.module
- votingapi.module
- ....(добавьте свой!)
Если среди задействованных Вами модулей использующих cron нет, можете его не включать, но я не рекомендую это делать.
- Как узнать точно, какие модули используют cron?
Надо поискать текст _cron()
во всех файлах в каталоге modules
. Если модуль использует cron, то в его исходном тексте будет строка: function ИмяМодуля_cron()
.
- Как можно запустить cron Drupal`а вручную?
Очень просто: просто наберите в броузере http://www.ВашСайт.ru/cron.php
. Откроется пустая страница - так и должно быть. В случае успешного выполнения, в логах Drupal`а (/admin
) останется сообщение.
- А можно сделать так, чтобы Drupal сам себя обслуживал (запускал для себя cron)?
Можно. Для этого нужно установить модуль Poormanscron. Он также может пригодиться, если Вы не можете настроить системный cron.
- Какие в интернете есть сервисы предоставляющие услуги cron?
www.cron-server.de - на немецком
www.webcron.org - на француском (есть английский)
- А как сделать, чтобы cron.php (или другой скрипт / другая программа) вызывался операционной системой?
Нужно в файл .crontab, находящийся в Вашем домашнем каталоге, занести строчку, которая будет содержать время и имя программы/скрипта.
- Какой формат у файла crontab?
В Wikipedia можно вкратце посмотреть о формате с примерами.
На сайте www.opennet.ru есть man`ы на русском языке, в частности по формату файла crontab`а. Ну а самую актуальную, для Вашей системы, информацию Вы получите, набрав команду man 5 crontab
.
Опишу вкратце этот формат и я
Строка может быть трёх типов: комментарий (начинается с #), задание переменной среды (SHELL,MAILTO,PATH,LOGNAME,HOME) или команда для cron. Строки не могут смешиваться, то есть нельзя писать комментарий в строке с командой.
С первым типом всё понятно - комментарий он и есть комментарий.
Второй тип - задание переменной выглядит как "имя_переменной = величина". За подробностями о переменных обращайтесь в справку.
Ну и третий тип, самый интересный для нас, выглядит как шесть полей разделённых пробельными символами (пробелы и/или знаки табуляции). Первые пять полей задают время для команды, шестой - имя программы:
(минуты:0-59) (часы:0-23) (дни месяца:0-31) (месяц:0-12) (день недели:0-6, 0-воскресенье) (программа_с_параметрами)
Каждое из первых пяти полей может быть задано следующим образом:
- Звёздочка (*) - обозначает весь диапазон (от первого до последнего)
- Диапазон чисел, от и до. Например "5-7" будет означать 5,6 и 7
- Списки. Это числа (или диапазоны) разделенные запятыми. Например: "1,5,10,11" или "1-11,19-23".
- Звёздочка или диапазон с шагом. Используется для пропусков в диапазонах. Шаг указывается после косой черты. Например "2-10/2" будет значить "2,4,6,8,10", а выражение "*/2" в поле "часы" будет означать "каждые два часа.
Последнее поле (шестое) определяет команду для запуска.
Примеры (взяты из Wikipedia):
# в качестве командного интерпрететора использовать /bin/sh
SHELL=/bin/sh
# результаты работы отправлять по этому адресу
MAILTO=paul@example.org
# добавить в PATH
PATH=$PATH:$HOME/bin
#### Здесь начинаются задания
# выполнять каждый день в 0 часов 5 минут, результат складывать в log/daily
5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1
# выполнять 1 числа каждого месяца
15 14 1 * * $HOME/bin/monthly
# каждый рабочий день в 22:00
0 22 * * 1-5 echo «Пора домой» | mail -s «Уже 22:00» john
23 0-23/2 * * * echo «Выполняется в 0:23, 2:23, 4:23 и т. д.»
5 4 * * sun echo «Выполняется в 4:05 в воскресенье»
0 0 1 1 * echo «С новым годом!»
15 10,13 * * 1,4 echo «Каждый понедельник и четверг в 10:15 и 13:15»
- Какую команду нужно использовать, чтобы "дёрнуть" cron.php?
Можно использовать wget
или lynx
.
Пример (запуск cron.php каждый час):
0 * * * * /usr/bin/lynx -source http://www.ВашСайт.ru/cron.php > /dev/null 2>&1
перед тем, как записывать эти команды себе в crontab, проверьте, что программа (wget
или lynx
) находится в /usr/bin
. Это может быть не так! Для проверки пути wget
запустите whereis wget
- будет выведен список файлов, содержащих слово wget
.
- Как занести запись в crontab?
Для этого есть одноимённая программа: crontab
On-line man-страница: crontab. Ну а "правильную" помощь Вы получите, набрав в unix-shell man 1 crontab
.
Формат команды:
crontab { -l | -r | -e }
где:
-l - выводит текущих crontab файл на стандартный вывод.
-r - удаляет текущий crontab файл.
-e - используется для редактирования текущего crontab используя редактор, заданный переменной окружения VISUAL или EDITOR.
Таким образом, вводим crontab -e
, добавляем нужную строку с командой и нажимаем "Ctrl-D".
- А ещё ссылочки по теме есть?
А то! Пожалуйста:
- Работа по расписанию во FreeBSD (cron crontab)
- Как заставить cron выполнять наши приказания
- Cron Job configuration line by line [drupal.org]
Мало? Присылайте свои
Комментарии
image.module
simplenews.module
votingapi.module
ок, спасибо - добавил
http://www.webcron.org/
дергаю cron wget-том:
/usr/bin/wget -q --append-output=/dev/null http://myhost/cron.php > /dev/null
все прекрасно отрабатывает по расписанию, но на хостинге происходит следующее:
это нормально?
Эти файлы должны автоматически удаляться
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
Переводы некоторых модулей.
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
как видите не удаляются )))
сапорта пинать?
кстати это может быть связано с тем что php safe mode включен?
А такая команда тоже не работает:
/usr/bin/wget -O - -q http://www.ВашСайт.ru/cron.php
?
работает но результат тот же.
куча мусора, который удаляю в ручную.
сапорт все валит на скрипт:
----
>Запускаю с сервера
[root@xxx /home/xxxx]# /usr/local/bin/php /xxxxxx/public_html/cron.php
Выдает ошибки:
shmget() failed: Cannot allocate memory
Failed to start up concurrent users module!
Warning: main(): Unable to access ./includes/bootstrap.inc in /home/beautysp/public_html/cron.php on line 9
Ошибка где то в скрипте, разобраться не зная системы нам будет трудно.
В таких случаях лучше у разработчиков спросить почему выходит такая
ошибка.
-----
при этом мои объяснения про то что скрипт при прямом вызове отрабатывает нормально, и про то что данная ошибка следствие невозможности открыть ./includes/bootstrap.inc по причине некоректности вызова с учетом системного окружения, во внимание не принимаются.
получаю следующий ответ:
--
Просто при вызове скрипта Вы не можете видеть те ошибки, которые
показываются при вызове его с сервера напрямую. Если сможете включить
дебаггер какой нибудь - все увидите.
---
в общем lol
общатся с сапортом больше не хочу - бесперспективно.
Опция -q при дёрганьи wget'ом точно должа помочь. У самого была такая проблема, оказалось, что это фича wget. Он просто сохраняет страницу, которую выгреб, а если страница с данным именем уже существует, приплючоввывает счетчик в конец. Посему, как и сказал товарищ Dan, используйте -q в параметрах wget
wget -q http://www.ВашСайт.ru/cron.php
Извините за возможно тупой вапрос: а хрон надо перезапускать периодически или его можно уже не трогать, если он уже однажды был запущен?
предположим на Вашем сайте включен модуль aggregator, для публикации новостей с информационных сайтов...
вопрос в том как часто обновляются новости: раз в 30 минут, каждую минуту, раз в месяц...?
насколько актуально такое обновление на сайте?
в общем всё зависит от задач и торебований включенных модулей.
Для нормального функционирования некоторые модули требуют периодического технического обслуживания,. Например, модулю watchdog надо удалять старые сообщения, а модулю search - индексировать содержимое сайта.
Кхм, мой вопрос в другом: какое значение ставить в опции Cron runs interval ?
Эту статью нужно добавить в подшивку (book) документации.
Можно. Для этого нужно установить модуль Poormanscron. Он также может пригодиться, если Вы не можете настроить системный cron.
а не грузит ли он хост!?
Грузит. На каждое обращение к сайту - проверка времени запуска хрона. Одно условие всего, но всё ж есть.
Потому - настраивайте системный хрон.
А вот с этим как бороться, ни кто не знает.
База крошечная 30 Мб. Ни каких рассылок.
Какой то модуль глючит. Пробуй:
* по очереди отключать
* добавить в поле строку, записываемою в журнал
Быстрая диагностика зависания крона:
http://drupal.ru/node/9732
спасибо
На половине хостингов катит так
38 * * * * wget -O - -q http://www.example.ru/cron.php
38 * * * * lynx -source http://www.example.ru/cron.php > /dev/null 2>&1
А как его запускать каждый день в час дня и час ночи?
создаете две задачи
0 1 * * * wget -O - -q http://www.example.ru/cron.php
0 13 * * * wget -O - -q http://www.example.ru/cron.php
первая будет отрабатывать в час ночи
вторая в час дня
0 1,13 * * * wget -O - -q http://www.example.ru/cron.php
век живи, век учись...
спасибо
Добрый день! У меня может быть очень глупый вопрос, т.к. я новичок...
Я нашел бесплатный хостинг и поставил (не без проблем) туда друпал:
у меня есть доступ к БД (посредству phpMyAdmin) и FTP доступ...
также на хостинге есть php5.2.5, MySQL4.1.22 и места достаточно для меня.
Сам вопрос: как можно определить, какая ОС у хостера и работает ли ".crontab" на ОС, отличных от posix систем? Если не т, то есть ли подобные технологии для других систем?
1) phpinfo()
2) Можете использовать один из многочисленных сторонних сервисов, которые запустят cron.php На вашем сервере
А зачем эти немецкие и французские крон-сервера? Что они делают? Зачем они нам, пользователям Друпал?
И, кстати, как правильно - дрУпал, или друпАл... Мне легче произносить дрУпал. Закачал видео, а там друпАл... аж стошнило))
Сервера дергают ваш cron. Не подумайте плохого - просто периодически запускают cron.php на вашем сайте.
И, кстати, как правильно - дрУпал, или друпАл...
А вы послушайте песенку про Drupal (где-то на форуме обсуждали). Там вообще слышится "ДжУпОл, джУпОл, джУпАл!"
Решение было сохранено на сайте DrupalCookBook.ru:
Запуск хронометра (cron).
Авторы, предложившие решения, также указаны в сохранённой статье.
Еще вопрос, надо использовать либо первую строчку либо вторую, или обе? о_О
Любую, на выбор.
При правильной настройке crona на странице отчет о состоянии Друпал будет надпись "Запуск crona автоматичеки"?
Друпал не сможет определить настроен ли автоматический запуск крона или нет, он просто смотрит последнюю дату запуска и если он был очень давно - светит предупреждение.
Я правильно понимаю: он не видет его настройки, но видет последнее время срабатывания?
Да. Сами подумайте, как он увидит настройки непонятно чего - крон можно дёргать сотней разных способов, например из сети - как смотреть?
Спасибо за помощь! Все понял!
хорошая таблица сравнений различных вебсервисов хрона http://www.onlinecronservices.com/
бесплатный и работающий к примеру есть http://www.onlinecronjobs.com/ (на англ.)
Спасибо за подробное описание.
Вообще у автора статьи самые адекватные, нежели у кого-либо другого.
Спасибо. Статье уже три года, а она всё актуальна. Удивительно!
Может кому-то пригодиться следующая информация, взял отсюда. (мне бы пригодилась
Чаще всего перенаправление в /dev/null используется для подавления стандартного вывода (выходного потока) и/или вывода сообщений об ошибках (потока диагностики) программы их перенаправлением в /dev/null, такое подавление чаще всего используется в командных сценариях (shell scripts) для подавления нежелательного вывода на консоль.
На консоль - можно, это не проблема, главное - в файл не сохранять.
В данном руководстве используется вывод lynx в null:
0 * * * * /usr/bin/lynx -source http://www.ВашСайт.ru/cron.php > /dev/null 2>&1
И wget выводит вместо файла на консоль (опция '-О -'):
0 * * * * /usr/bin/wget -O - -q http://www.ВашСайт.ru/cron.php
Dan
С этим то разобрался, просто не знал именно эту команду, поэтому и привел ее описание, тк писать в конфиги не знамо что не люблю, а так может кому-то еще пригодиться
А вывод на консоль же в любом случае происходит авторизован ли пользователь от которого команда или нет?
Если да то тогда что будет с консолью на экране монитора, /dev/null получается предпочтительнее 0о
Ты про какую консоль? Монитор у хостера?
Ни друпал-пользователь, ни shell-пользователь никаких сообщений ни на какой консоли никогда не увидит.
Хрон выполняется средствами ОС и никак не завязан на пользователя (залогинен тот или нет). Вывод на консоль подавляется для того, что бы ОС не слала письма пользователю с сообщениями типа "Выполнилась команда такая-то, вывод у неё был такой-то" (хотя это можно и отключить).
То есть если выводится на консоль то он исполняет и пишет в логи?
А если вариант с null то логи не пишутся?
Не очень понимаю что имеется ввиду под выводом на консоль.
Зачем нам хостер мы сами себя хостим на openbsd, а простых вещей таких не знаем((
Процесс хрона запускается один раз при загрузке системы и висит демоном, ожидая времени выполнения программ, заданных в файле crontab.
Лог работы хрона записывается в журнал /var/spool/cron/crontabs (в Debian). Это только лог самого хрона, а не программ которые он запускает.
Программы, которые запускаются хроном могут писать в системный журнал пользуясь функцией syslog и, по идее, они ничего не должны выдавать в stdout. Если же выдают, то считается, что они хотят "сказать" что-то важное (например, что порушилась БД или используются неверные ключи для вызова программы и т.д.), поэтому формируется e-mail с содержимым вывода команды и отправляется root'у.
Как видишь, никакой консоли тут нет и в помине. Есть stdout, который нигде не отображается, т.к. он виртуальный (это буфер хрона).
Если сам себя хостишь, то такие вещи надо знать
То что хрон при загрузке системы стартует это единственное что знаю из описанного.
Спасибо за подробный ответ.
А так да надо, поэтому потихоньку со всем подряд разбираюсь, а с хроном первый раз пришлось столкнуться, хотя раньше и читал про него, но не пробовал на ощупь.)
И все таки в приличном обществе
администраторовслово "хрон" как минимум не поймут. Так что не надо пытатьсяссать против ветраизменять устоявшиеся произношение..Ещё в приличном обществе употребляют "сервак", "винда", "линух", "цыска" и т.д. Будем равняться на них?
нет, крон - это конкретный сервис на конкретной группе ОС. точка. Фактически, имя собственное.
сервак,винда,линух - это жаргонные словечки которые образованы сокращением от полных слов.
Как можно сравнивать теплое с мягким? Пример не засчитан
Пример Вами не понят. Есть люди которые говорят "задача", есть которые говорят "таск". "Крон" - это калька с английского, жаргон, такой же "цыска". В русском языке корректнее хрон.
И что? Если это сервис, то мы название его переводить не будем? "Mail agent" будет "мыльным агентом"? А "lpd" будет "принтовым демоном"?
Это во-первых.
А во-вторых я в самом начале статьи сказал, что это моё личное мнение, я его никому не навязываю, хотя отстоять могу.
О, если бы в русском языке заимствования звучали именно как переводы, а не кальки, половина IT слов мы бы не узнали
А друпал это капля (ну или каплевун)
Процесс перевода это трудный и творческий процесс. Просто так им никто не будет заниматься, отсюда и выползает калька, как самое очевидное и в то же время необходимое. Но процессом сим можно и нужно управлять, иначе погрязнем. В смвоё время появились люди у которых было желание и время и составили краткий список основных терминов друпала. Если бы не этот список, некоторые элементы которого горячо обсуждались, сидели бы сейчас с нодой и юзером.
Думаю пришло время составлять новый список.
Слово "Хрон" у меня ассоциируется с чем то похоронным. Типа хоронять кого.
а еще есть схрон
А у меня - со швейцарскими часами. Всё дело в ассоциациях
спасибо
Скажите, как будет команда выглядеть для ru-centr (тариф 301 поддерживающий планировщика заданий)?
Это надо спрашивать у ru-centr