虚拟空间PHP执行计划任务的总结

一直用的是阿里云共享虚拟主机,挺稳定的管理界面UI也还可以,最近需要做一个定时执行的功能,需求是每天定时运行一段代码块。

一开始我想到的是用sleep()函数实现这个功能:

ignore_user_abort();//关掉浏览器后脚本继续执行
set_time_limit(0);//设置脚本执行时间无上限
do{
    //需要执行的程序..
    sleep(3600*24)
}while(true)

在本地mamp环境运行没问题,好,赶紧上传看看行不行,结果上传后运行程序发现一秒执行了n多次,调试半天后发现是阿里云虚机禁用了sleep()函数,尝试usleep()函数,结果还是被禁用了(谴责阿里云居然没有任何提示)。

后来花了几十块钱升级成了云独享主机,结果多了几个鸡肋的功能同时问题还没解决,这波血亏!

转念一想,那我不用休眠函数了,既然他一直执行,那就让他一直执行下去吧!程序一直判断时间,然后在确定的时间点执行

ignore_user_abort();//关掉浏览器后脚本继续执行
set_time_limit(0);//设置脚本执行时间无上限
$interval=3600*24;
$tagtime=time()+$interval;
do{
    if(time()>$tagtime){   //如果当前时间戳大于目标时间的时间戳则执行
        //需要执行的程序..
        $tagtime+=$interval;   //加上时间间隔,获得下一个目标时间的时间戳
    }
}while(true)

结果第二天发现程序挂了,难道是阿里云把程序杀掉了或者php内存溢出吗,后来把间隔时间改为5分钟,改为60分钟乃至2小时程序都可以正常间隔运行,直到程序运行六个半小时以后自动被杀死,后来在上面的程序中加了flush()和ob_flush()函数清理php缓存还是没用,阿里云实锤了!我颓了

后来我脑洞大开,一个程序可以执行6h+,那我在这个程序结束前唤起另一个程序不就行了吗?也就是两个php文件相互唤醒,用header()函数+exit()函数,确实能成功唤醒,但是当我关闭浏览器时,两个程序都停止了,也就是ignore_user_abort()函数失效了,至此我彻底放弃了阿里云虚机,通过万能的小度小度,发现部分美国使用cPanel控制面板的虚机可以执行计划任务,遂放弃了阿里云,去新开了一个虚机,价格比阿里云便宜。

里面有Cron作业使用很方便,定时任务稳定准时,还有执行结果邮件通知功能,至此问题解决啦!再次感叹一下,店大欺客啊

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值