Saya memiliki sekitar 20 wp_cron()
fungsi seperti kode berikut. Hampir semua crons beroperasi setiap jam; beberapa harian.
if ( ! wp_next_scheduled( 'my_task_hook' ) ) {
wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}
add_action( 'my_task_hook', 'my_task_function' );
function my_task_function() {
//Complex Code
}
Untuk meningkatkan kinerja server, dan agar tidak terus mendapatkan pesan batas server dari perusahaan hosting, saya ingin memastikan bahwa hanya satu cron berjalan pada waktu tertentu ... Apakah mungkin?
Jawaban yang diterima saat ini bagus, tapi saya punya pertanyaan berikut, itu sebabnya saya mulai hadiah untuk pertanyaan ini.
Harap baca jawaban yang diterima pada awalnya.
Mari kita asumsikan Cron 1 berjalan, kode cron2 saya tidak akan berjalan karena kita masih berada di dalam 5 menit atau cron pertama masih berjalan, tetapi karena wp_schedule_event( time(), 'hourly', 'my_task_hook' );
berjalan untuk cron2 saya pikir WordPress menganggap cron2 berjalan ..... Jadi pada dasarnya kode kode cron2 tidak pernah berjalan ..... Atau saya salah paham sesuatu?
Jawaban:
Ya, itu mungkin ...
Dan sejujurnya, seringkali sangat penting untuk melakukan ini ... WP Scheduler terkadang cenderung menyebabkan masalah, ketika tugas cron panjang ...
Jadi bagaimana saya mengatasi masalah ini?
Saya menggunakan Transients API untuk mengimplementasikan semaphores ...
Berikut kodenya:
Mengapa saya menggunakan transien dalam kasus ini? Karena:
Dan bagaimana jika ada banyak tindakan berbeda yang harus dilakukan?
Jadi katakanlah ada banyak tugas cron yang berbeda, yang seharusnya tidak pernah berjalan dalam waktu yang sama, tetapi kami masih ingin semuanya berjalan ...
Jika kami menggunakan solusi dengan semaphore dan hanya menggunakan satu semaphore untuk semua tugas ini, maka beberapa di antaranya mungkin tidak pernah berjalan. Lalu apa yang harus dilakukan?
Dalam hal demikian, Anda harus mengubah pemikiran Anda. Anda tidak memiliki beberapa tugas independen, tetapi ada beberapa tugas yang harus dilakukan. Jadi Anda harus menerapkannya dengan cara ini.
Begitu:
sumber
delete_transient()
. Jadi waktu itu penting? Maksud saya, kapan saja Anda menaruhset_transient
, itu dihapus setelah pekerjaan saya selesai ... Jadi mengapa ada waktu?my_task_function_semaphore
nama transient, saya harus menggunakan semua crons lain dengan nama yang sama?