Wordpress cron wp_schedule_single_event – 액션이 항상 작동하지 않음
다음과 같은 이벤트를 등록합니다.
wp_schedule_single_event( time(), 'do_custom_hook', array( $body ) );
그 위에, 이하의 액션을 추가했습니다.
add_action('do_custom_hook', 'process_custom_hook', 10);
function process_custom_hook($body){
// custom code here
}
다만, process_custom_hook 함수가 기동하는 경우가 있는 반면, 단순히 기동하지 않는 경우도 있습니다(단, 대부분의 경우 기동).약 10~20%의 시간을 놓치고 있습니다.)
이벤트는 항상 true로 반환되며, 이는 이벤트가 등록되었음을 의미합니다.
또, 테스트하는 동안, 항상 다른 주장(본문)을 확인했습니다.
이 문제가 발생할 수 있는 이유가 있습니까?
코덱스에서:
각 스케줄된 이벤트에 $args의 고유한 값을 전달하지 않는 한 동일한 이름의 기존 이벤트 후 10분 이내에 이벤트를 발생하도록 스케줄링하는 것은 무시됩니다.
커스텀 훅이 일시적으로만 기능하는 경우는, 이 방법을 검토해 주세요.훅을 즉시 처리해야 할 경우 훅에 고유 이름을 붙이거나 훅에 고유 값을 전달하는 방법을 검토하는 것이 좋습니다.
가 없는 는, 「사용할 수 있습니다.」를 이용해 .wp_next_scheduled()
작업의 다음 실행 시기를 결정하고 다음 예약된 작업 이후에 실행되도록 작업을 설정합니다.
또한 이 태스크가 일관된 논리를 가지고 있는 것처럼 보이는 경우(사실과 같이) 작업 정보를 데이터베이스에 저장하고 5~10분마다 cron 작업을 실행하여 데이터베이스에서 새로운 작업을 선택하여 처리하면 어떨까요?이렇게 하면 다음 동작에 대처할 필요가 없어집니다.wp_schedule_single_event()
.
이 사건에 대한 공식 문서에 따르면
동일한 액션 훅을 사용하여 기존 이벤트로부터 10분 이내에 이벤트를 발생하도록 스케줄링하는 것은 스케줄링된 각 이벤트에 대해 고유한 $args 값을 전달하지 않는 한 무시됩니다.당신이 말한 대로지만 아마도 이중 확인이 도움이 될 것입니다.
사용자가 사이트를 방문하는 시점에 따라 다르므로 예약된 시간이 경과한 경우 WordPress 사이트를 방문하는 사람이 있을 때 작업이 트리거됩니다.
에는 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,wp_next_scheduled()
하고 ""를 사용합니다.wp_schedule_event()
이치노
일정이 실행되었지만 무시된 특정 경우 예약이 true로 반환될 수 있습니다.뛰긴 했지만 무시당했어요.
송수신된 모든 사항에 대한 상세 로그를 제안하고, 발생한 내용이 자신이 있는 내용과 동일한지 직접 확인하시기 바랍니다.
여기에서는, 유사한 문제와 메뉴얼을 참조할 수 있는 링크를 몇개인가 소개합니다.
이게 도움이 됐으면 좋겠고, 안 됐으면 같이 해결해 보자.
- https://developer.wordpress.org/reference/functions/wp_schedule_single_event/
- https://wordpress.stackexchange.com/questions/15475/using-wp-schedule-single-event-with-arguments-to-send-email
- https://rudrastyh.com/wordpress/wp_schedule_single_event.html
- http://hookr.io/functions/wp_schedule_single_event/
Wordpress 문서에서:
WP-Cron은 페이지를 로드할 때마다 실행이 필요한 작업을 확인하기 위해 예약된 작업 목록을 체크함으로써 작동합니다.실행 예정인 태스크는 해당 페이지 로드 중에 호출됩니다.
WP-Cron은 시스템 cron과 같이 항상 실행되지 않습니다.페이지 로드시에만 트리거 됩니다.
작업을 2:00로 예약하면 스케줄링 오류가 발생할 수 있습니다.PM과 페이지 로드는 5시까지 발생하지 않습니다.PM.
예정된 시간에 페이지 로드가 발생하지 않기 때문에 당신의 cron 이벤트가 누락될 수 있다고 생각합니다.
문제 해결 방법은 다음과 같습니다.시스템 태스크스케줄러로의 WP-Cron 후크
앞서 언급한 바와 같이 WP-Cron은 지속적으로 실행되지 않으며, 이는 정시에 실행되어야 하는 중요한 작업이 있을 경우 문제가 될 수 있다.이에 대한 쉬운 해결책이 있습니다.원하는 간격(또는 필요한 특정 시간)에 실행되도록 시스템의 태스크 스케줄러를 설정하기만 하면 됩니다.가장 쉬운 해결책은 도구를 사용하여 wp-cron.php 파일에 웹 요청을 하는 것입니다.
제 경우 Woocommerce의 액션 스케줄러도 실행 중일 때 이 문제가 발생했습니다.Action Scheduler는 Woocommerce와 함께 제공되는 cron 태스크 매니저입니다.또한 instance wp-mail-smtp 등의 다른 플러그인도 포함되어 있습니다.
저도 똑같은 문제가 있어서 뭐가 문제인지 알 수가 없었어요.Wordpress 코드를 디버깅해 본 결과, 1분마다 10초 이내에 스케줄된 작업(즉, 스케줄된 작업에 추가된 순간)이 발생하면 바로 삭제된다는 결론을 내렸습니다.태스크가 이미 없어졌기 때문에 일반 wp cron이 실행할 수 없는 상태에서 액션스케줄러가 스택에서 popping하는 일종의 레이싱 상태였던 것 같습니다.
그리고 이 말은 해야 할 게 있어요.crontab
(Wordpress의 'fake cron'이 아닌) 1분마다 wp-cron.php를 호출합니다.
교체했을 때wp_schedule_single_event
와 함께as_enqueue_async_action
작업 스케줄러의 기능, 더 이상 작업이 삭제되지 않았습니다.
액션 스케줄러를 사용하는 모든 것을 제거하는 것이 대체 방법이라고 생각합니다만, 저는 그것을 시도하지 않았습니다.
Wordpress에서 cron을 사용하고 있지만 일부 플러그인은 CRON의 작동을 비활성화하거나 금지합니다.이 경우 Server Cron을 통해 이 일정을 작성하거나 플러그인을 설치하여 일정을 재확인하는 것이 좋습니다.
저도 같은 문제가 있어서 찾기가 좀 어려웠어요...보시다시피 최신 업데이트는 없지만, 저는 작동합니다.https://wordpress.org/plugins/wp-crontrol 및 https://br.wordpress.org/plugins/advanced-cron-manager/
편집하는 Cron을 특정할 수 있기 때문에 에디션의 정밀도가 향상됩니다.이 플러그인과 관련된 다른 플러그인이 있습니다.크론의 스케줄에 대해 말씀하셨죠그래서 제가 이걸 지목한 거예요.달력에서 크롬 구성을 알 수 있습니다.WP Cron Cron 스케줄을 편집할 수 있습니다.
언급URL : https://stackoverflow.com/questions/60374317/wordpress-cron-wp-schedule-single-event-action-not-always-working
'programing' 카테고리의 다른 글
프로젝터를 실행할 수 없음 - ECONNREFUSED 연결 ECONNREFUSED (0) | 2023.03.02 |
---|---|
모든 기존 사용자에 대한 Wordpress 기본 표시 이름 변경 공개 (0) | 2023.03.02 |
GSON을 사용하여 Android에서 동적 "키" 및 "값"을 가진 JSON 구문 분석 (0) | 2023.03.02 |
Angular는 어떻게 알아?JS를 "갱신"하다 (0) | 2023.03.02 |
Angularjs의 $http 사용 시 응답 헤더 읽기 (0) | 2023.03.02 |