wp query — WordPress: Blokowanie Cron i kolejka
WordPress Development Stack Exchange to witryna z pytaniami i odpowiedziami dla programistów i administratorów WordPress. Rejestracja zajmuje tylko minutę.
Zarejestruj się, aby dołączyć do tej społeczności
Każdy może zadać pytanie
Każdy może odpowiedzieć
Najlepsze odpowiedzi są głosowane i trafiają na sam szczyt
Spytał
Oglądane1 tys. razy
Mam kilka skryptów intensywnie obciążających procesor, których nie chcę uruchamiać jednocześnie. Od czasu do czasu skrypty nakładają się i powodują awarię serwera. Już przy 2 GB, a kontener mysql nadal ulega awarii.
Mam konfigurację crontab do trafienia przykład.com/cron.php?do_cron=randstr co 15 minut.
Czy jest jakiś sposób na założenie blokady i wykonanie tylko jednego zadania cron na raz? Kiedy to się skończy, uruchomi się następny.
Wiem, że można to osiągnąć za pomocą mechanizmu blokowania plików PHP (ale wtedy nie kolejkuje on następnego zadania). Nie jestem pewien, czy WP robi to samodzielnie.
Każda pomoc mile widziana!
Prosty Cronjob Walker
- Utwórz CPT
cronjob
dla twoich cronjobs. - Dodaj odpowiednie metadane postu (akcja, last_executed… i cokolwiek potrzebujesz)
-
Utwórz funkcję walkera
function my_cronjob_walker() { $args= array( 'post_type' => 'cronjob', 'posts_per_page' => 1, 'meta_key' => 'last_executed' 'orderby' => 'meta_value', ); $cronjob = new WP_Query($args); if ($cronjob->have_posts()) while ($cronjob->have_posts()) { $cronjob->the_post(); // do your cronjob stuff here do_action(get_post_meta(get_the_ID(), 'action', true); update_post_meta(get_the_ID(), 'last_executed', date('c')); } } if ( ! wp_next_scheduled( 'do_cronjob_walker' ) ) { wp_schedule_event( time(), 'hourly', 'do_cronjob_walker' ); } add_action( 'do_cronjob_walker', 'my_cronjob_walker' );
domyślny