php实现每天凌晨1点处理订单的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php实现每天凌晨1点处理订单的问题相关的知识,希望对你有一定的参考价值。

最近在做商城这块,需要自动定时处理3天内未付款的订单以及7天后自动的收货等操作,服务器是window的,用php实现会一直运行 占内存,也不好终止,不知各位有没有什么好点的办法,php不支持多线程,linux和window下任务计划知道, php实现定时就这么麻烦吗

参考技术A 你可以用php的定时任务,格式如下:
function autoexec()

ignore_user_abort(true);
set_time_limit(0);
$inc = 900;
do


// 写你的代码

sleep($inc);

while (true);

追问

php貌似是只有这种方法,但一些服务器上不支持ignore_user_abort ,而且一直运行着,对性能不好,消耗内存 php语言还是太弱了点啊

追答

你可以写成原生态的php,用php.exe去调用他,设置成系统的定时任务,也可以啊;

参考技术B 基本上只能用计划任务操作,或者你用别的语言处理订单,反正也就是数据修改追问

如果只是改状态,那就简单了,问题是结单时还涉及利润计算的问题,我们的网站等于是一个商城 加分销系统,又不想用Php的定时,占内存 又一直运行,看样子只能用别的语言或计划任务了

追答

如果计算量比较大,可以用c/c++/python来处理,定时启动计算。

追问

恩,3Q,不行哦,整个网站大都是php开发的,其他语言写不太方便,因为是window下 所以只能用计划任务了

本回答被提问者采纳

java Timer 定时每天凌晨0点执行任务

import java.util.TimerTask;  
/** 
 * 执行内容 
 * @author admin_Hzw 
 * 
 */  
public class Task extends TimerTask {  
    public void run() {  
        System.out.println("我有一头小毛驴!");   
    }  
import java.util.Calendar;  
import java.util.Date;  
import java.util.Timer;  
  
/** 
 * 任务管理 
 * @author admin_Hzw 
 * 
 */  
public class TimerManager {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        new TimerManager();    
    }  
  
    //时间间隔(一天)  
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;  
    public TimerManager() {  
        Calendar calendar = Calendar.getInstance();  
        calendar.set(Calendar.HOUR_OF_DAY, 1); //凌晨1点  
        calendar.set(Calendar.MINUTE, 0);  
        calendar.set(Calendar.SECOND, 0);  
        Date date=calendar.getTime(); //第一次执行定时任务的时间  
        //如果第一次执行定时任务的时间 小于当前的时间  
        //此时要在 第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。  
        if (date.before(new Date())) {  
            date = this.addDay(date, 1);  
        }  
        Timer timer = new Timer();  
        Task task = new Task();  
        //安排指定的任务在指定的时间开始进行重复的固定延迟执行。  
        timer.schedule(task,date,PERIOD_DAY);    
    }  
    // 增加或减少天数  
    public Date addDay(Date date, int num) {  
        Calendar startDT = Calendar.getInstance();  
        startDT.setTime(date);  
        startDT.add(Calendar.DAY_OF_MONTH, num);  
        return startDT.getTime();  
    }  
  
}  

 

以上是关于php实现每天凌晨1点处理订单的问题的主要内容,如果未能解决你的问题,请参考以下文章

设置定时任务为每天凌晨2点执行和每小时执行一次

spring怎么设置定时任务为每天凌晨2点执行和每小时执行一次?

java Timer 定时每天凌晨1点执行任务

java Timer 定时每天凌晨1点执行任务

分布式任务调度平台XXL-JOB

Cron表达式