В CMS WordPress для выполнения задач по крону используется файл wp-cron.php. К таким задачам, например, относится публикация статьи в заданное время, выполнение пингов (если вы понимаете, о каких я пингах говорю), выполнение операций с плагинами, создающими и обновляющими карту сайта, чистит корзину, проверяет наличие обновлений и многое другое.
Пример выполнения такой задачи можно увидеть в server-status, если он включен. Если не включен – то включить его можно по этой>>> статье.
Сам пример:
8-2 – 0/0/2 . 0.03 75525 5798 0.0 0.00 0.00 77.120.106.40 l2db.com.ua POST /wp-cron.php?doing_wp_cron=1348513272.78116106986999511718
Если выполнение этого файла вызывает нездоровую нагрузку на сервер – можно отключить эти задачи. Для этого в файл конфигурации WordPress wp-config-php добавляем строку:
define(‘DISABLE_WP_CRON’, true);
Добавить её можно где-то после установки языка, т.е. после строки
define(‘WPLANG’, ‘ru_RU’);
Другой вариант решения – в самом файле wp-cron.php закомментировать строку:
//ignore_user_abort(true);
Данная функция продолжает выполнение скрипта даже при превышении им параметра max_execution_time для PHP.
И наиболее правильный вариант – выполнять wp-cron.php системным кроном, во время наименьшей нагрузки на сервер.
Для этого – выключаем wp-cron.php в конфигурации WordPress, как описано в самом начале статьи.
Далее – создадим в текстовом редакторе файл cron.sh, разместим его в домашнем каталоге пользователя. Например у меня это будет /usr/local/www/users/l2db. Добавим в него такое содержимое:
#!/usr/local/bin/bash
/usr/local/bin/wget -O /dev/null -q http://l2db.com.ua/wp-cron.php
В Linux путь к wget-у будет скорее всего /usr/bin/wget. Аналогично с bash или sh. Проверить можно командой:
# whereis wget
Установим владельцем файла пользователя, которому принадлежит виртуалхост с сайтом:
# chown l2db:l2db cron.sh
Разрешим выполнение файла:
# chmod u+x cron.sh
Так мы разрешаем запуск файла только самому пользователю.
Теперь, находясь в консоли под нужным пользователем, выполняем:
$ crontab -e
И добавляем 2 строки:
MAILTO=root
0 05 * * * /usr/local/www/users/l2db/cron.sh
Первая нужна для того, что бы после выполнения cron-а нам приходило письмо в случае ошибки при выполнении, вторая – запускает файл /usr/local/www/users/l2db/cron.sh от имени пользователя l2db каждый день в 5 часов утра.
Проверить выполнение задачи можно в файле лога cron:
# cat /var/log/cron | grep l2db
Sep 26 10:14:00 akira /usr/sbin/cron[14107]: (l2db) CMD (/usr/local/www/users/l2db/cron.sh)
И проверим лог веб-сервера Apache на предмет выполнения самого файла wp-cron.php:
# tail -f /var/log/apache/l2db.com.ua-access.log | grep cron
77.120.106.40 – – [26/Sep/2012:10:14:00 +0300] “GET /wp-cron.php HTTP/1.0” 200 – “-” “Wget/1.13.4 (freebsd9.0)”
Подсказка по указанию времени запуска задач в кроне есть тут>>>.
Инструкия по применению системного крона – тут>>>.