Uruchamianie WP CRON przy użyciu zadań cron serwera nie ma żadnej negatywnej strony. W rzeczywistości jest to zalecana praktyka.
Według oficjalnego dokumentu rozwoju wtyczki WordPress :
WP-Cron nie działa w sposób ciągły, co może stanowić problem, jeśli istnieją krytyczne zadania, które muszą zostać uruchomione na czas. Istnieje na to łatwe rozwiązanie. Wystarczy skonfigurować harmonogram zadań w systemie, aby działał w pożądanych odstępach czasu (lub w wymaganym czasie).
Aby to zrobić, musisz najpierw wyłączyć domyślne zachowanie crona w wp-config.php
:
define('DISABLE_WP_CRON', true);
Następnie zaplanuj wp-cron.php
z serwera. W przypadku systemu Linux oznacza to:
crontab -e
Jednak zamiast uruchamiać go w wierszu polecenia (CLI), uruchom go jako żądanie HTTP. Do tego możesz użyć wget
:
*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
WordPress ładuje wszystkie wymagane pliki podstawowe, wtyczki itp. W wp-cron.php
następującym KODIE:
if ( !defined('ABSPATH') ) {
/** Set up WordPress environment */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
}
Nie martw się więc, że WordPress nie ładuje ważnych funkcji.
wget http://YOUR_SITE_URL/wp-cron.php
nie wspominając o tym?doing_wp_cron
Czy jedna jest lepsza od drugiej? Co robi dodatek?doing_wp_cron
, którego nie robi wersja inna niż?define('DISABLE_WP_CRON', true);
wyłącza tylko tę część procesu cron, a następnie wywołuje skrypt cron z kodem typu:*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
na serwerze upewnia się, że zadania cron są wykonywane. Każda wtyczka do planowania nie zna nawet różnicy.Istnieje kilka wad: Po pierwsze, gdy używasz wp-cron.php jako biblioteki cli, takie jak zmienne $ _SERVER nie są ustawione. Ludzie pokonują to ograniczenie, używając zamiast tego żądania curl do wp-cron.php.
Po drugie, ponieważ sama WP nie jest ładowana z wp-cron.php; jeśli używasz wtyczki SMTP do programu pocztowego, to nie zostanie ona załadowana podczas wywoływania wp-cron. Ponownie użycie wywołania curl zastępuje ten problem. Zwinięcie wydaje się być najczęściej stosowaną metodą.
Jednak; Wolę używać wp-cli po prawidłowym ustawieniu ustawień poczty w Postfiksie i (dla nginx) konfiguracji php-fpm i ustawieniu pliku crontab, takiego jak
(Wyświetl listę wszystkich cronów z określonymi polami w formacie csv - hook jest nazwą crona, względny czas następnego uruchomienia. Usuń te, które pokazują „teraz” jako następne uruchomienie (te, które są teraz) za pomocą AWK, przekaż tę listę do xargs do wywoływanie
wp cron event run $HOOK
każdego crona.) Korzystanie z wp-cli ładuje WordPressa poprawnie (wybieram pominięcie wtyczek podczas wyświetlania listy cronów, ponieważ błędy kodu i ostrzeżenia php zepsują skrypty, ale nie pomijanie ich podczas uruchamiania crona z xargs, ponieważ cron może wymagać załadowania wtyczek)Mam nadzieję, że daje to kilka wskazówek, na co zwrócić uwagę.
źródło
Istnieje wiele powodów, aby nie wyłączać wp-cron. W rzeczywistości znalezienie takiego przypadku jest prawie niemożliwe. Nie spowalnia Twojej witryny i jest używany do rzeczy, o których możesz nie wiedzieć.
Wiele wtyczek używa WP-Crona do planowania rzeczy. Mogą się zdezorientować, jeśli wyłączysz program planujący.
Liczba samouczków na ten temat jest bardzo rozpowszechniona, ponieważ jest myląca i ponieważ nie ma wiele wspólnego z witryną po jej wyłączeniu. To, co zrobi, spowoduje ból głowy dla twórcy, który musi rozwiązać tajemniczy problem, który stwarza w ciągu sześciu miesięcy.
Ponadto, Heartbeat WP strzela co 15 sekund w obszarze administracyjnym, rozwiązując ten problem dla 99% ludzi, którzy myślą, że go mają.
źródło
Mam jeszcze znaleźć prawdziwą wadę odciążania wp-cron do usługi zewnętrznej. Robię to od wielu lat.
Zwłaszcza w dzisiejszym świecie, w którym można uruchamiać aplikacje jako mikrousługi.
Używam osobnych kontenerów Docker dla każdego komponentu WordPress - php, web, db, crontab, redis i tak dalej. Posiadanie crontab jako osobnego kontenera, wywoływanie wp-cron przez http za pomocą sieci lokalnej, działające tylko wtedy, gdy jest to potrzebne.
Zmniejsza to obciążenie węzłów zaplecza i poprawia bezpieczeństwo dzięki mniejszej powierzchni ataku.
Jeśli deweloper nie może wymyślić, jak to zrobić, bez konieczności wywoływania wp-cron przy każdym ładowaniu strony, do diabła, to po prostu mówi o braku doświadczenia w jego imieniu. „Pozostawienie w spokoju”, ponieważ nie rozumiesz, jak działają rzeczy, nie jest dobrym powodem, aby je zachować.
źródło