WordPress разполага с много вътрешни подсистеми, подпомагащи го по един или друг начин. Сега ще ви покажем една от тях, отговаряща за изпълнение на отложени задачи във времето или периодични задачи, а именно WordPress Cron.
1.Какво е cron и къде е мястото на WordPress?
Cron е името на системата, работеща оригинално под Unix и производните му и отговаряща за изпълнението на отложени или циклични задачи на специфично време. Ако искате повече информация, можете да прочетете статията в Wikipedia относно него тук. Или ако разполагате с *nix, можете да напишете просто “man cron” в командния ред. Операционната система позволява да се изпълняват отложени задачи като архивиране на файловете, обновяване на системата, започване на нови лог файлове и т.н.
Но каква е връзката на Cron с WordPress? WordPress също се нуждае от възможност за изпълнение на задачи в дадено време - например веднъж на ден или веднъж на час. Но за съжаление, в голяма част от хостингите не може да ви се даде достъп до Cron поради една или друга причина. Първата причина е сигурността - всички задачи от Cron работят на ниво root, което е най-високото възможно ниво в *nix и може да има катастрофални последици при неправилното му използване (а също така и при правилното му използване). Втората причина е самото разнообразие от операционни системи - възможно е на една система Cron да работи по един начин, на друга система да работи по друг начин и това пречи да се направи универсално решение за всички вариации. Например, има и Windows хостинг решения, където Cron липсва изобщо.
Затова екипът, разработващ WordPress, не може да разчита на използването на сървърния Cron и са взели решение да разработят своя собствена система.
2.Въведение в wp-cron
WordPress Cron е нещо, което реално е псевдо-cron система. Разликата между двете може много лесно да се покаже по следния начин:
Истинската Cron система работи ето така:
1. Времето за изпълнение на задачата настъпва;
2. Cron изпълнава задачата, която е указана за това време.
А ето и как се случват нещата в WordPress Cron:
1. Посетител преглежда някаква страница от WordPress;
2. WordPress Cron проверява дали е настъпило времето за изпълнение на задачата;
3. Ако времето за изпълнение е преминало, то задачата се изпълнява.
3.Ограничения на WordPress Cron
Гореописаната система работи почти перфектно, но се наблюдават няколко проблема.
1. Системата не е прецизна, когато няма посетители. Накратко, когато един блог не е посещаван, тогава WordPress не може да изпълни Cron, при което задачата може да се изпълни чак след няколко часа при първия посетител.
Например - имаме задача за изпълнение в 3:00 ч., която искаме да изпълним точно в указаното време и нямаме посетители от 1:00 ч. Тогава ако влезе първия посетител в 6:00 ч., то задачата от 3:00 ч. ще бъде изпълнена с няколко часово закъснение. Така дори и да поставим задача за изпълнение на всеки час, задължително ще имаме пропуски в самата задача (т.е. ще имаме часове без изпълнение на задачата), ако нямаме посетители. Разбира се, има решение - да се използва прецизен Cron, който да работи независимо от посетителите.
2. Системата се претоварва от много посетители. Когато посетителите на сайта са няколко десетки на минута се среща другия проблем - системата работи малко по-бавно, защото за всеки един потребител се проверява дали не е настъпило времето за изпълнението на дадена задача. Тази проверка въпреки, че е бърза, също отнема време, а това за натоварени сайтове е твърде ценен ресурс, за да се пилее с лека ръка. Решението е да се забрани вътрешния Cron за WordPress и да се използва външен такъв.
3. Системата може да се претовари и при изпълнение на тежки задачи в по-късо време. Това не е проблем на самата система, а по-скоро проблем, изкуственно предизвикан от комбинация от модули. Има разработчици които приемат, че дадена операция няма да отнеме много време и им трябва да се извиква доста често, например на всеки 5 или 10 минути. Но в по-големи сайтове с повече информация, извикването на по-чести времеотнемащи задачи води до повишено използване на процесорно време. Този проблем може да се види и като вариация, прекалено честото извикване на Cron задачите, което също води до увеличено използване на процесорното време.
4.Как да видим задачите за използване?
Тъй като само разработчици използват системата за задачите, е невъзможно тези данни да се видят от потребителите без специални средства. Най-често това са разширения на WordPress специално за целта.
Ето и някои от тях:
1. Advanced Cron Manager
2. FFF Cron Manager
3. Improved Cron
Всички тези разширения показват най-често името на задачите, което разработчиците са им дали, указаното време за изпълнение на задачата и кога ще е времето за изпълнение на задачата.
Разбира се, показаните примери са на WordPress без инсталирани допълнителни модули. Възможно е при вас да изглежда по-различно.
5.Как да забраним WordPress Cron?
Ако WordPress авторите са предвидили възможност вградения Cron да бъде изключен с настройка от wp-config.php. Единственното, което трябва да бъде прибавено е:
define('DISABLE_WP_CRON', true);
По този начин ще се забрани на WordPress да извиква WordPress Cron и като резултат няма кой да извика задачите. Затова след спирането му активирайте някой от указаните по-долу методи с цел извикване на WordPress Cron.
6.Как да извикаме WordPress Cron от cPanel?
1. Отваряме cPanel и избираме "Cron Jobs"
2. Избираме кога да се изпълни задачата и командата за изпълнението ѝ
3. След натискане на бутона "Добавяне" задачата вече е активна и ще бъде изпълнена в указаното време
Ето и примерни команди с които се изпълнява WordPress Cron:
php -q php /home/myuser/public_html/wp-cron.php
wget -q -O - "http://mydomain.com/wp-cron.php" > /dev/null 2>&1
curl -vs -o /dev/null http://mydomain.com/wp-cron.php > /dev/null 2>&1
Където заменете mydomain.com с вашият домейн и myuser с потребителското име на вашият потребител в cPanel. Ако се притеснявате, можете да се обърнете към поддръжката на хостинга с молба да го направят вместо вас.
7.Алтернативни Cron системи
Има и алтернативни Cron системи, позволяващи да се използва външен ресурс на определено време. Една от тях е EasyCron.
Тя позволява даден файл да бъде извикван дори и системата да не ви разрешава да използвате нейния Cron. Разбира се, безплатния потребител има някакви ограничения, но те отпадат в платената версия.
Защо се казва Cron?
Cron е съкращение, което авторите на Unix са харесали. Произлиза от гръцката дума за време - chronos, Χρόνος.
Всичко това е валидно само ако имате проблем с процесорното време, породен от WordPress Cron и прекомерната му употреба. Ако можете, ограничете неговото използване и вижте дали процесорното време ще намалее. Разбира се, възможно е и нищо да не се случи, възможно е и да даде резултат. Ако се притеснявате от промените, винаги можете да помолите поддръжката на хостинга да извърши указаните действия вместо вас.