Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 731|回复: 0

PHP如何实现定时任务,PHP定时任务方法,最佳解决方案,PHP自动任务处理 自动备份

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-2 09:51:01 | 显示全部楼层 |阅读模式

    定时任务对于php来说一直都是很多朋友的一个难题,但却很多地方都遇到了。
    比如说:
    游戏开发程序中,每隔10分钟给玩家发兵一次
    sns社区中每隔20秒检测一下是否有人给我发消息
    自动采集程序,每隔5分钟采集一次最新内容
    微博数据同步,每隔10个小时通过微博api接口同步一次用户数据
    ……

    大概有那么几种方法:
    1.Linux系统
    定时直接可以用cron来执行一个php脚本 或者其他语言的脚本[你要有足够的系统权限]
    执行编辑cron命令

    1
    crontab -e

    比如每隔5分钟执行下 /root/bin目录下的test.php脚本

    */5 * * * * php /root/bin/test.php

    2.windows系统
    可用计划任务执行脚本,不举例

    3.如果没有系统权限,那就往下看吧。
    由于php属于解释型弱语言,所以做定时任务的时候不会像java那样容易,在java中直接给个进程就可以让系统执行定时任务,但是在php中没那么简单 设置都没有多线程的概念。

    我第一次接触定时任务的时候是一个做php的朋友问我怎么实现定时发兵,我当时给出的答案是写一个包含文件,每次都执行的时候都调用这个文件检查是否有任务,但试想 如果没人触发怎么办,显然答案并不完美。

    后来我又通过其他渠道获得了解决的最佳办法,而且我还亲自做了测试。
    大致理念就是设定关闭浏览器程序也会停留在服务器内存中执行,并且相应时间永不过期
    看程序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    ignore_user_abort(TRUE); // 设定关闭浏览器也执行程序
    set_time_limit(0);      // 设定响应时间不限制,默认为30秒
     
    $count = 0;
    while (TRUE)
    {
         sleep(5);           // 每5秒钟执行一次
     
         // 写文件操作开始
         $fp = fopen ( "test" . $count . ".txt" , "w" );
         if ( $fp )
         {
             for ( $i =0; $i <5; $i ++)
             {
                 $flag =fwrite( $fp , $i . "这里是文件内容www.xxtime.comrn" );
                 if (! $flag )
                 {
                     echo "写入文件失败" ;
                     break ;
                 }
             }
         }
         fclose( $fp );
         // 写文件操作结束
     
         $count ++;
         // 设定定时任务终止条件
         if ( file_exists ( 'lock.txt' ))
         {
             break ;
         }
    }

    把这个文件命名为 tast.php 放在网站根目录
    如: www.xxtime.com/tast.php
    访问此网页。此程序会再网站根目录不断生成名为test0.txt,test1.txt,test2.txt…的文本文件
    访问后可关闭浏览器,不影响程序继续执行,如想阻止程序,请在网站根目录下放一个名为lock.txt的文件。
    如:www.xxtime.com/lock.txt
    当然重新启动服务器或者重启电脑也可以阻止程序继续运行

    相关内容:
    windows的schtasks定时任务:http://www.cnblogs.com/lostyue/archive/2011/10/24/2223166.html

    Cron服务是SAE为开发者提供的分布式定时服务:http://sae.sina.com.cn/?m=devcenter&catId=195

    另外标记一个php调用命令备份mysql的文章http://www.iteye.com/problems/90027

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-2 09:45 , Processed in 0.177012 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表