热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP有什么工具能做定时任务

好比我每隔12个小时就爬一次我的订单状态

好比我每隔12个小时就爬一次我的订单状态

回复内容:

好比我每隔12个小时就爬一次我的订单状态

1、crontab
示例:

crontab -e 添加
# 每隔12小时运行一次脚本.
。* */12 * * *  /usr/bin/php /your/path/cron.php

优点:稳定+简单+方便
缺点:时间间隔只能精确到分钟,按秒定时比较难做到

2 、常驻内存的各种PHP类库
https://github.com/reactphp/react
https://github.com/walkor/workerman

以workerman代码为例,定时任务代码类似

require_once './Workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
$task = new Worker();
$task->OnWorkerStart= function($task){
    // 每2.5秒运行一次定时任务
    Timer::add(2.5, function(){
          echo "task run\n";
    });
};
Worker::runAll();

优点:常驻内存,支持多进程,自带进程管理,支持秒级甚至毫秒级别定时任务
缺点:需要引入他们的代码库

3、非自有服务器(PHP虚拟主机)上实现php定时任务
有时我们没有服务器shell权限,比如PHP虚拟主机,那么上面两个方案都无法实现,则一般需要使用页面访问的方式执行定时任务。方法如下:

首先:建立一个php任务页面,如task.php,开头必须有

// 保证即使用户把浏览器关掉(断开连接),php也会在服务器上继续执行
ignore_user_abort(true);

然后:任务页面有了,剩下的就是如何定时请求问题了,解决方法有几种大概如下
1、开个浏览器,打开一个html页面,利用js定时器定时ajax请求这个任务页面,需要你一直开个页面
2、利用用户自然访问触发。比如用户正常访问一个页面,加个罗技判断是否该运行定时任务,如果是则发送个curl请求或者用户页面ajax请求任务页面
3、利用朋友的主机定时访问自己站点的任务页面。比如朋友主机有shell权限,则可以利用crontab定时curl访问自己的任务页面
4、借助第三方
一些服务商提供了各种类型的定时任务,例如阿里云的ACE提供了单独的定时任务,你可以填写自己应用下的某个uri。百度云BCE提供了服务器监测功能,每天会按照一定的时间规律访问应用下的固定uri。类似的第三方平台上还有很多定时任务可以用。你完全可以用这些第三方定时任务作为跳板,为你的网站定时任务服务。

总结:
1、如果是时间粒度为分钟,则crontab最方便
2、如果时间粒度很细或者需要多控制,上面PHP类库是比较好的方案
3、如果没有没有shell权限,则考虑第三种方案

如果大家有其它方案,欢迎提出 : )

1、后台执行PHP脚本,常驻内存

一个PHP开发的类库 system_daemon

ignore_user_abort(true);//忽略abort
set_time_limit(0);// 无限制的执行下去
$interval=60*30; 
do{
    //ToDo  
    sleep($interval);
}while(true);

2、linux上的计划任务(crontab)定时执行,比如Laravel Scheduler

00 */2 * * * /usr/local/bin/php /data/www/script.php

3、用C、Go等其他语言,写一个守护进程(Daemon)

这个要看研发实力了

What's the better way?

最简单的办法就是写shell脚本,用脚本来执行php 脚本。很多框架都有任务调度功能,比如Lavarl 你可以参考。

其实可以使用Linux上的Crontab服务来实现定时任务,写个任务脚本,然后使用crontab来定时执行。

传送门:每天一个linux命令:crontab命令

slim框架
slim的cli环境
定时执行软件: crontab,计划任务及其他

逻辑代码

$cliEnvirOnment= new \Slim\Extras\Environment();

$app = new \Slim\Slim(array(
    'environment' => $cliEnvironment
));
$app->get(
    '/hello/:name',
    function ($name) {
        echo "Hello, $name";
    }
);
$app->run();

运行命令

php test.php hello Ahmet
#Output
Hello, Ahmet

定时任务

  • 如前几贴都提到 crontab 这在Linux环境下首推,

  • 如果windows有定时计划或其他软件,

  • OSX有自己的一套定时任务系统(也比较推荐),也可以安装crontab

在crontab中添加任务,由Linux系统的cron进程定时执行任务,这个任务脚本同样可以用PHP来写。

crontab -e 添加
# 每隔12小时(12:00,24:00)运行一次脚本.
* */12 * * * /png/www/example.com/cron/tast.php

chmod +x tast.php
#!/png/php/5.4.39NTS/bin/php

crontab 没啥好讨论的

可以在后台开启一个守护进程,监控

crontab

用crontab, 然后写个守护进程就可以

mysql 的存储过程不是挺好吗?

最简单还是crontab
当然,如果你想折腾这些所谓php框架的话,可以试试这个
https://github.com/kohkimakimoto/workerphp

用计划任务方便, 但是在单独的脚本文件中处理逻辑很麻烦, 在CP中可以很容易的处理

在命令行模式下运行

你可以像写web一样使用MVC, 只是入口不同而已

这个功能用swoole扩展来做,易如反掌! swoole扩展能做得更多

参考连接
swoole

crontab

最常见的做法应该还是crontab 简单粗暴

为什么要整的那么麻烦,如果是Linux,直接上crontab,推荐下面这篇文章:

Linux定时任务

推荐阅读
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
author-avatar
陈家碧玉3
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有