Time limit on long cron job?

时间:2021-11-24 作者:Chad Reitsma

我正在开发一个会员系统,该系统将处理续期付款。

如果我使用set_time_limit(0) 内部wp_schedule_event (cron)函数,这是否足以确保它有执行支付处理所需的时间?我们使用的是Stripe,我假设每个事务的API响应大约为1-2秒(希望更少),但如果我需要处理很多事务,我担心会遇到一般的30秒超时。

我更喜欢在运行时设置,而不是在php中全局设置。ini公司

代码示例:

//CRON - Setup rebilling
add_action(\'dd_cron_rebill_expiry\', \'dd_rebill_expiry\');
add_action(\'init\', function() {
               
   //Make sure we don\'t schedule duplicate events if this already exists!
   if (!wp_next_scheduled(\'dd_cron_rebill_expiry\')) {
                            
   //Schedule hourly 
   $time = strtotime("+1 hours", strtotime(current_time(\'Y-m-d h:00:00\'))); 
   wp_schedule_event($time, \'hourly\', \'dd_cron_rebill_expiry\');   
                    
}
                
});
            
#Rebill the user if their expiry date has been reached
function dd_rebill_expiry() {
 
  set_time_limit(0);  //will this work???

  //WP_User_Query goes here with 100 user maximum
  //Loop through all valid users & perform payment processing here
            
}

1 个回复
SO网友:Chad Reitsma

进一步的研究导致信息混杂,没有明确的解决方案。

我们的解决方案是使用一个单独的文件,并通过命令行使用CRON执行脚本,而不是依赖于Wordpress CRON系统。这还增加了max\\u execution\\u time=0的额外好处。PHP Max execution time

Stripe的API似乎需要大约2-3秒来处理事务。如果我们将WP\\u User\\u查询限制为100个用户,那么处理整个批次大约需要300-500秒。

因为我们计划每小时执行一次脚本,所以我使用set\\u time\\u limit=3500(略低于一小时),这样,如果出现问题,它将在CRON再次执行脚本之前终止。