发布于 1970-01-01 08:00
  • 17 个回答
    • 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权限,则考虑第三种方案

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

      2022-12-01 11:48 回答
    • 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?

      2022-12-01 11:48 回答
    • 最简单的办法就是写shell脚本,用脚本来执行php 脚本。很多框架都有任务调度功能,比如Lavarl 你可以参考。

      2022-12-01 11:48 回答
    • 其实可以使用Linux上的Crontab服务来实现定时任务,写个任务脚本,然后使用crontab来定时执行。

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

      2022-12-01 11:48 回答
    • 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

      2022-12-01 11:48 回答
    • 在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
      <?php
      // 这里写你的PHP代码
      2022-12-01 11:48 回答
    • crontab 没啥好讨论的

      2022-12-01 11:48 回答
    • 可以在后台开启一个守护进程,监控

      2022-12-01 11:48 回答
    • crontab

      2022-12-01 11:48 回答
    • 用crontab, 然后写个守护进程就可以

      2022-12-01 11:48 回答
    • mysql 的存储过程不是挺好吗?

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

      2022-12-01 11:48 回答
    • 用计划任务方便, 但是在单独的脚本文件中处理逻辑很麻烦, 在CP中可以很容易的处理

      在命令行模式下运行

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

      2022-12-01 11:48 回答
    • 这个功能用swoole扩展来做,易如反掌! swoole扩展能做得更多

      参考连接
      swoole

      2022-12-01 11:48 回答
    • crontab

      2022-12-01 11:48 回答
    • 最常见的做法应该还是crontab 简单粗暴

      2022-12-01 11:48 回答
    • 为什么要整的那么麻烦,如果是Linux,直接上crontab,推荐下面这篇文章:

      Linux定时任务

      2022-12-01 11:48 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有