出现这个错误的很大原因是执行时间过长,php-fpm超时退出;但是为了准确查找原因,我们需要查看nginx以及php-fpm的运行日志来确定问题的关键所在。
同时查看nginx.conf中的配置情况,对几个timeout的值作必要修改,他们的原值是600或者300,我比较粗暴,直接在原基数基础上加0.(存疑,实际上这里并没有报错,但是我还是进行了加0操作)
在下方的日志中可以明确看出是因为执行时长原因导致自动终结。
所以我们需要对php/etc/php-fpm.conf中request_terminate_timeout
的值做适当增加(我直接加了三个0),这样问题就解决了。
然而还有一个问题需要了解,那就是如何让其在后台运行而不影响前端体验?wp_schedule_single_event() 或者wp_schedule_event(), 部分可参见https://www.wpdaxue.com/wp-cron.html
// 重新生成缩略图---一下功能将依据已经注册的所录入尺寸重新生成缩略图
// Put the function in a class to make it more extendable
class GB_regen_media {
public function gb_regenerate($imageId) {
$imagePath = wp_get_original_image_path($imageId);
if ($imagePath && file_exists($imagePath)) {
// unlink();
wp_generate_attachment_metadata($imageId, $imagePath);
}
}
}
// Add a load function
function gb_regen_load() {
// Instantiate the class
$gb_regen_media = new GB_regen_media();
$regenerate_thumbnail_value = get_option('xcm_regenerate_thumbnail_enable', '');
$args = array('post_type'=>'attachment','numberposts'=>null,'post_status'=>null);
$attachments = get_posts($args);
// You can get the image Id from the url of the media screen
if($attachments){
require_once(ABSPATH . 'wp-admin/includes/image.php');
foreach($attachments as $attachment){
$gb_regen_media->gb_regenerate($attachment->ID);
}
}
}
add_action('sck_regen_thumbs_event','gb_regen_load');// Create the event which will execute the automated task.
function sck_regen_thumbs_in_5s($new_value,$old_value) {
// Schedule the event.
if( ! wp_next_scheduled( 'notesontech_refresh_feed_event' ) && $new_value == '1' ){
wp_schedule_single_event( time() + 60 , 'sck_regen_thumbs_event');//crontab最小间隔是1分钟
$new_value = '';
}
return $new_value;
}
add_filter('pre_update_option_xcm_regenerate_thumbnail_enable', 'sck_regen_thumbs_in_5s',10,2);