Mam WordPress Multisite z kilkoma stronami. Założyłem DISABLE_WP_CRON
się true
w moim wp-config.php
.
Jeśli skonfigurujemy zadanie crona za pomocą wget lub curl, mamy 30 sekundową regułę do wykonania skryptu PHP. Wysyłanie mnóstwa powiadomień e-mail i robienie innych rzeczy jest tak małe (może zdalne połączenie z serwerem SMTP jest powolne, może naprawdę duża wiązka powiadomień e-mail z bbPress lub cokolwiek innego).
Może możemy użyć czegoś takiego?
php -q wp-cron.php
Ale uruchamia on crona tylko na jednej stronie w Multisite (każda strona ma swoje własne zadania cron w różnych tabelach MySQL).
PS Na forum wpmudev.org znalazłem dziwne „rozwiązanie”, które również używa Curl.
Kolejny PS WP CLI ma niesamowite wp cron
polecenia, ale pozwala tylko na ręczne uruchamianie zadań cron (tak, możemy użyć --url
attr). Na przykład:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
WP-CLI
kod podstawowy?wp
/ WP-CLI w swoimPATH
? Jeśli tak, dlaczego nie uruchomić tego z pliku bash uruchomionego w cronie?Odpowiedzi:
Myślę, że najlepszym sposobem jest użycie WP-CLI, ale aby to zrobić, musisz napisać skrypt bash. Oto taki, który powinien to dla Ciebie zrobić:
Musisz wtedy dodać ten skrypt do crontab i uruchomić go może co minutę, jeśli chcesz
źródło
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH
- Wedługrun
dokumentów powinieneś użyć--due-now
flagi. Zmniejszyłoby to liczbę wyszukiwań i indywidualnych wywołań zdarzeń. Zobacz: wp-cli.org/commands/cron/event/run . Tak czy inaczej, jestem z @OmarJackman - używa wiersza poleceń do korzystania z narzędzi wiersza poleceń WordPress. Rekwizyty dla czystego przykładu Bash. Możesz zaokrąglić tę odpowiedź, pokazując wpis crontab.WP_PATH="/path/to/wp"; for SITE_URL in $(wp site list --fields=domain,path,archived,deleted --format=csv --path="$WP_PATH" | grep ",0,0$" | awk -F ',' '{print $1 $2}'); do wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH"; done
Po dodaniu stałej w
wp-config.php
WP-CLI
Zakładając, że
config.yml
konfiguracja jest prawidłowa, możesz pominąć--path
flagę podczas połączeniacron run
.Aby uruchomić wszystkie zadania CRON w kolejności:
function run_crons_due_now_in_order { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL"; done; echo "Done"; }; run_crons_due_now_in_order;
Jeśli chcesz, aby działały równolegle (najpierw uruchamiając cron inny niż lokacja):
function run_all_crons_due_now { for SITE_URL in $(wp site list --fields=url --format=csv | tail -n +2 | sort); do wp cron event run --due-now --url="$SITE_URL" && echo -e "\t+ Finished crons for $SITE_URL" & done; wait $(jobs -p); echo "Done"; }; run_all_crons_due_now;
Chcesz umieścić dowolną opcję w pliku wykonywalnym
dodaj zadanie crontab
i prawdopodobnie wykonują co minutę
Jeśli chcesz uruchomić niestandardowe polecenie z crona, może być konieczne określenie pełnych ścieżek działania wp-cli .
PHP
Jedynym powodem, dla którego musisz załadować WordPress tutaj, jest zebranie adresów URL z bazy danych zamiast korzystania ze wstępnie zdefiniowanej listy. Będziemy pingować tylko te adresy URL i nie obchodzi nas, jaka jest odpowiedź.
I dodaj jedno połączenie do twojego
custom-cron.php
w crontabźródło
Łatwiejszy jednowarstwowy z mniejszym uderzeniem:
wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"
Możesz uruchomić go ręcznie lub umieścić w skrypcie i wywołać z crona, jak w innych odpowiedziach.
źródło
To jest moje rozwiązanie:
Nazywamy to od crontab, mam nadzieję, że to pomoże
źródło
Myślę, że musisz przede wszystkim powiedzieć, co rozumiesz przez „uruchom wp-cron.php we właściwy sposób”. Według Wordpress nie ma sensu wyłączanie wp-cron, a mimo to chcesz, aby działało ... Z punktu widzenia Linuksa, wget-ing lub / bin / php-ing wp-cron.php byłoby poprawne, ale wygląda na to, że twój konkretny host ogranicza twoją liczbę wywołań php ze względów bezpieczeństwa? - ta część nie jest całkowicie jednoznaczna z twojego opisu.
Kolejne pytanie: ile e-maili to „tona”? Są świetne powody, dla których nie powinieneś próbować zbyt szybko wysyłać zbyt wielu wiadomości e-mail.
Być może będziesz musiał przemyśleć swoje cele.
(Chciałbym skomentować zamiast odpowiadać, ale nie mam wystarczającej reputacji na wpstack.)
źródło
DISABLE_WP_CRON
jest wyłączanie tej metody podczas ustawiania bardziej niezawodnej metody cron systemu.