Изключване на WordPress cron и заместването му с cron job (планирана задача)

WordPress има вграден cron механизъм за планиране на задачи, като актуализации и публикуване на планирани публикации. За разлика от Unix cron, който се изпълнява на фиксирани интервали независимо от активността, WordPress cron зависи от трафика на уебсайта. Той задейства wp-cron.php, когато посетител отвори уебсайта, което означава, че задачите може да не се изпълнят навреме при нисък трафик.

Кои са някои предимства и недостатъци на WordPress cron?

Стандартният WordPress cron има както предимства, така и недостатъци. При висок трафик на уебсайта, wp-cron.php се изпълнява често, осигурявайки навременни актуализации и точни данни за посетителите. Това е особено полезно за уебсайтове, които разчитат на разширения с обновления в реално време.

Въпреки това, ако уебсайтът има нисък или никакъв трафик за определен период, планираните задачи може да не се изпълнят, докато не се появи посетител, което може да доведе до показване на остаряло съдържание. Освен това, ако wp-cron.php отнема твърде дълго време за изпълнение, посетителите може да усетят забавяне при зареждането на уебсайта или да видят неточни данни.

Друг недостатък е, че ако задачите отнемат твърде дълго време за изпълнение, може да се стартират множество cron процеси едновременно, което допълнително да забави тяхното изпълнение. Високият трафик също може да доведе до повишено натоварване на системните ресурси, особено ако ботове обхождат уебсайта. В някои случаи, WordPress cron може да забави зареждането на страниците, което да повлияе негативно на усещането в посетителите му.

Как да се намали интервалът на изпълнение на WordPress cron?

Можете да добавите следния ред към конфигурационния файл на WordPress (wp-config.php) чрез раздела "Файлове" в хостинг Контролния панел, за да смекчите някои от недостатъците на WordPress cron системата:

define( 'WP_CRON_LOCK_TIMEOUT', 3600 );

Този ред ограничава изпълнението на wp-cron.php до веднъж на час, което обикновено е достатъчно за повечето уебсайтове и планирани задачи. Освен това намалява натоварването на системните ресурси и минимизира влиянието върху времето за зареждане на страниците, подобрявайки цялостната производителност на уебсайта.

Как да замените WordPress cron със стандартна cron задача?

За да замените стандартния WordPress cron със самостоятелна cron задача на нашите сървъри, следвайте тези стъпки:

  1. Деактивирайте стандартното изпълнение на WordPress cron

    По подразбиране, WordPress стартира wp-cron.php при всяко посещение на страница, което може да доведе до излишно натоварване на сървъра, особено при уебсайтове с висок трафик. За да деактивирате тази функционалност:

    1. Отворете хостинг Контролния панел и влезте в секцията "Файлове".
    2. Намерете и отворете файла wp-config.php.
    3. Добавете следния ред преди коментара /* That's all, stop editing! */: 
    define('DISABLE_WP_CRON', true);Това ще предотврати автоматичното изпълнение на wp-cron.php при всяко посещение на уебсайта.

  2. Настройте cron задача през хостинг Контролния панел

    Има няколко начина да стартирате WordPress cron ръчно, като можете да го конфигурирате по два различни начина в хостинг Контролния панел:

    • Въведете командата директно при настройката на cron задачата.
    • Създайте скрипт (wrapper script) и настройте cron задача, която да го изпълнява.

    Важно:

    • Заменете $HOME/www/www с директорията на Вашия WordPress уебсайт (за главния домейн не правете промени, за поддомейн "blog": $HOME/www/blog) или
    • заменете YOUR_DOMAIN.com с точния домейн или поддомейн на уебсайта.

    Създайте cron задача, като използвате кода отдолу в зависимост от това дали предпочитате WP CLI или GET заявка:

    Използване на WP-CLI:
    wp cron event run --due-now --path=$HOME/www/www > /dev/nullИзползване на GET заявка:
    GET "http://YOUR_DOMAIN.com/wp-cron.php" > /dev/null
  3. Създайте wrapper скрипт (по избор)

    Ако предпочитате, можете да създадете скрипт и да настроите cron задача, която да го изпълнява.

    1. Влезте в секцията "Файлове" в хостинг Контролния панел.
    2. Създайте скрипта в директория по Ваш избор, например /private/ или директорията на WordPress (/www/www за основния домейн).
    3. Задайте име на файла: cron.sh и добавете кода отдолу в зависимост от това дали предпочитате WP CLI или GET заявка:

    Използване на WP-CLI:
    #!/bin/bash
    wp cron event run --due-now --path=/home/example/www/www > /dev/null
    Използване на GET заявка:
    #!/bin/bash
    GET "http://YOUR_DOMAIN.com/wp-cron.php" > /dev/null
    След като сте създали скрипта, можете да зададете cron задача, която да го изпълнява автоматично през определени интервали. Така WordPress cron ще се изпълнява редовно, без да зависи от посещенията на потребители и без да увеличава времето за зареждане на страниците.

За повече подробности, вижте нашата статия за Cron Jobs (Планирани Задачи) в хостинг Контролния панел, за да се запознаете с интерфейса и наличните опции.