Saya memiliki WordPress Multisite dengan beberapa situs. Aku mengatur DISABLE_WP_CRON
untuk true
di saya wp-config.php
.
Jika kita mengatur tugas cron dengan wget atau curl, kita memiliki aturan 30 detik untuk menjalankan skrip PHP. Sangat kecil untuk mengirim banyak notifikasi email dan melakukan hal-hal lain (mungkin koneksi server SMTP jauh lambat, mungkin banyak sekali notifikasi email dari bbPress atau apa pun).
Mungkin kita bisa menggunakan sesuatu seperti ini?
php -q wp-cron.php
Tapi itu hanya menjalankan cron ke satu situs di Multisite (setiap situs memiliki tugas cron mereka sendiri dalam tabel MySQL yang berbeda).
PS Di forum wpmudev.org saya menemukan "solusi" aneh yang juga menggunakan Curl.
CLIwp cron
PS WP lain memiliki perintah yang luar biasa tetapi hanya memungkinkan menjalankan tugas cron secara manual (ya, kita bisa menggunakan --url
attr). Sebagai contoh:
wp cron event list --url=multisite.com
wp cron event list --url=subdomain.multisite.com
WP-CLI
kode inti?wp
/ WP-CLI di AndaPATH
? Jika ya, mengapa tidak memicu itu dari file bash yang berjalan di cron?Jawaban:
Saya pikir cara terbaik adalah menggunakan WP-CLI tetapi Anda harus menulis skrip bash untuk melakukan ini. Inilah salah satu yang harus dilakukan untuk Anda:
Anda kemudian perlu menambahkan skrip ini ke crontab dan menjalankannya mungkin setiap menit jika Anda mau
sumber
wp cron event run --due-now --url="$SITE_URL" --path="$WP_PATH
- Menurutrun
dokumen, Anda harus menggunakan--due-now
bendera. Ini akan mengurangi pencarian dan panggilan acara individu. Lihat: wp-cli.org/commands/cron/event/run . Either way, saya dengan @OmarJackman - dia menggunakan baris perintah untuk menggunakan alat baris perintah WordPress. Alat peraga untuk contoh Bash yang bersih. Anda bisa melengkapi jawaban ini dengan menunjukkan entri 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
Setelah menambahkan konstanta di
wp-config.php
WP-CLI
Dan dengan anggapan Anda memiliki
config.yml
pengaturan dengan benar, Anda dapat menghilangkan--path
bendera saat meneleponcron run
.Untuk menjalankan semua tugas karena cron dalam urutan:
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;
Jika Anda ingin mereka menjalankan secara bersamaan (pertama-tama jalankan cron non-situs-spesifik):
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;
Anda ingin menempatkan salah satu opsi di file yang dapat dieksekusi
tambahkan tugas crontab
dan mungkin mengeksekusi setiap menit
Jika Anda ingin menjalankan perintah khusus dari cron, Anda mungkin perlu menentukan path lengkap agar wp-cli berfungsi.
PHP
Satu-satunya alasan Anda perlu memuat WordPress di sini adalah untuk mengumpulkan URL dari database daripada menggunakan daftar yang telah ditentukan. Kami hanya akan melakukan ping ke URL-URL itu dan kami tidak terlalu peduli apa jawabannya.
Dan tambahkan satu panggilan ke Anda
custom-cron.php
di crontabsumber
Satu-liner yang lebih mudah dengan lebih sedikit bash:
wp site list --field=url | xargs -i -n1 wp cron event run --due-now --url="{}"
Anda dapat menjalankannya secara manual atau memasukkannya ke dalam skrip dan memanggilnya dari cron seperti pada jawaban lainnya.
sumber
Ini solusi saya:
Kami menyebutnya dari crontab, semoga membantu
sumber
Saya pikir Anda perlu memberi tahu kami apa yang Anda maksud dengan "jalankan wp-cron.php dengan cara yang benar" pertama dan terutama. Menurut Wordpress, tidak masuk akal bahwa Anda menonaktifkan wp-cron dan tetap ingin menjalankannya ... Dari perspektif Linux, wget-ing atau / bin / php-ing wp-cron.php akan benar, tetapi tampaknya host khusus Anda membatasi jumlah pemanggilan php Anda karena alasan keamanan? - bagian itu tidak sepenuhnya jelas dari deskripsi Anda.
Pertanyaan lain: berapa banyak email "satu ton"? Ada alasan bagus mengapa Anda tidak boleh mencoba mengirim terlalu banyak email dengan cepat.
Anda mungkin harus memikirkan kembali tujuan Anda.
(Saya lebih suka berkomentar daripada membalas tetapi saya tidak memiliki reputasi yang cukup di wpstack.)
sumber
DISABLE_WP_CRON
untuk menonaktifkan metode ini saat menyiapkan metode cron sistem yang lebih andal.