Tidak ada kerugian untuk menjalankan WP CRON menggunakan pekerjaan cron server. Sebenarnya ini adalah latihan yang direkomendasikan.
Menurut Dokumen Pengembangan Plugin WordPress Resmi :
WP-Cron tidak berjalan terus-menerus, yang dapat menjadi masalah jika ada tugas penting yang harus berjalan tepat waktu. Ada solusi mudah untuk ini. Cukup mengatur penjadwal tugas sistem Anda untuk berjalan pada interval yang Anda inginkan (atau pada waktu tertentu yang diperlukan).
Untuk melakukan ini, Anda harus terlebih dahulu menonaktifkan perilaku cron default di wp-config.php
:
define('DISABLE_WP_CRON', true);
Kemudian, jadwalkan wp-cron.php
dari server Anda. Untuk Linux, itu berarti:
crontab -e
Namun, alih-alih menjalankannya di Command Line (CLI), jalankan itu sebagai permintaan HTTP. Untuk itu Anda dapat menggunakan wget
:
*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
WordPress memuat semua file inti, plugin, dll yang diperlukan wp-cron.php
dengan KODE berikut:
if ( !defined('ABSPATH') ) {
/** Set up WordPress environment */
require_once( dirname( __FILE__ ) . '/wp-load.php' );
}
Jadi jangan khawatir tentang WordPress yang tidak memuat fitur-fitur penting.
wget http://YOUR_SITE_URL/wp-cron.php
tanpa penambahan?doing_wp_cron
Jadi apakah yang satu lebih baik dari yang lain? Apa penambahan selain?doing_wp_cron
yang bukan versi bukan?define('DISABLE_WP_CRON', true);
menonaktifkan hanya bagian dari proses cron dan kemudian memanggil skrip cron dengan kode seperti:*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
di server memastikan pekerjaan cron dieksekusi. Plugin penjadwalan apa pun tidak akan tahu bedanya.Ada beberapa kelemahan: Pertama, ketika menggunakan wp-cron.php sebagai cli hal-hal seperti $ _SERVER variabel tidak disetel. Orang-orang mengatasi keterbatasan ini dengan menggunakan permintaan curl ke wp-cron.php.
Kedua, Karena WP itu sendiri tidak dimuat dengan wp-cron.php; jika Anda menggunakan plugin SMTP mailer maka ini tidak akan dimuat saat memanggil wp-cron. Sekali lagi, menggunakan panggilan ikal mengatasi masalah ini. Curl tampaknya menjadi metode yang paling sering digunakan.
Namun; Saya lebih suka menggunakan wp-cli setelah mengatur pengaturan mail di postfix dan (untuk nginx) konfigurasi php-fpm dengan benar dan mengatur crontab seperti
(Sebutkan semua crons dengan bidang khusus dalam format csv - kait menjadi nama cron, jalankan relatif berikutnya adalah waktunya. Hapus yang menunjukkan 'sekarang' sebagai run berikutnya (yang seharusnya sekarang) menggunakan AWK, berikan daftar itu ke xargs ke panggil
wp cron event run $HOOK
setiap cron.) Menggunakan wp-cli memuat WordPress dengan benar (saya memilih untuk melompati plugin ketika mendaftar crons, karena kode erros dan peringatan php akan mengacaukan hasil skrip; tetapi tidak untuk melompati mereka ketika menjalankan cron dengan xargs, seperti cron mungkin membutuhkan plugins yang sedang dimuat)Semoga ini memberi Anda beberapa petunjuk tentang apa yang harus diwaspadai.
sumber
Ada banyak alasan untuk tidak menonaktifkan wp-cron. Bahkan, hampir tidak mungkin menemukan use case untuk melakukan ini. Itu tidak memperlambat situs Anda, dan digunakan untuk hal-hal yang mungkin tidak Anda sadari.
Banyak plugin menggunakan WP-Cron untuk menjadwalkan sesuatu. Mereka mungkin menjadi bingung jika Anda mematikan penjadwal.
Ada banyak tutorial tentang hal ini karena membingungkan, dan karena tidak banyak berpengaruh pada situs Anda ketika Anda menonaktifkannya. Apa yang akan dilakukannya, adalah menyebabkan sakit kepala pada dev yang harus memperbaiki masalah misterius yang diciptakannya dalam enam bulan.
Juga, WP Heartbeat menyala setiap 15 detik di area admin, menyelesaikan masalah ini untuk 99% orang yang berpikir mereka memilikinya.
sumber
Saya belum menemukan kelemahan nyata dari pembongkaran wp-cron ke layanan eksternal. Sedang melakukan ini selama bertahun-tahun sekarang.
Terutama di dunia saat ini di mana Anda dapat menjalankan aplikasi sebagai layanan microser.
Saya menggunakan wadah Docker terpisah untuk setiap komponen WordPress - php, web, db, crontab, redis, dan sebagainya). Memiliki crontab sebagai wadah terpisah, memanggil wp-cron melalui http menggunakan jaringan lokal, hanya berjalan ketika saya membutuhkannya.
Ini mengurangi tekanan pada node backend dan meningkatkan keamanan dengan memiliki permukaan serangan yang lebih kecil.
Jika pengembang tidak dapat menemukan cara untuk melakukan hal-hal tanpa harus memanggil wp-cron pada setiap halaman memuat, huh, ini hanya berbicara untuk pengalaman kurang atas namanya. "Membiarkannya sendiri", karena kamu tidak mengerti bagaimana segala sesuatunya bekerja bukanlah alasan yang baik untuk menyimpannya.
sumber