前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【开源推荐】强烈推荐你看看这个PHP定时任务扩展包EasyTak的使用方法

【开源推荐】强烈推荐你看看这个PHP定时任务扩展包EasyTak的使用方法

作者头像
PHP学习网
发布2023-06-19 15:34:02
3560
发布2023-06-19 15:34:02
举报
文章被收录于专栏:PHP学习网PHP学习网

PHP学习网将不定时分享优质开源项目,优质技术文章,精选面试题和资源,大家可以把PHP学习网设为🌟星标,第一时间获取最新推送,以防错过优质内容

这个包在我们做定时任务或者需要任务调度系统时特别实用,这是一个composer包,你可以把它安装在你需要的地方,下面说一下这个包吧。

首先我们必须明白PHP的定时器只能基于CLI命令行形式运行,由于FPM形式用完即走,内存立即释放,无法做到常驻,当然我们也可以让FPM常驻起来,但是内存开销过大。因此FPM本身就是官方用来提供给我们做网站CURD的,而CLI模式才是后端核心,大量的PHP服务都是基于PHP_CLI模式,因此高级程序员更必须了解CLI模式。但凡大点的公司都是用FPM处理网页,CLI处理服务队列。

下面的定时任务也是基于CLI执行。

我们使用的定时任务包是EasyTask,先安装它(参考官方文档,没有必要安装event扩展):

代码语言:javascript
复制
composer require easy-task/easy-task

使用实例

我们创建一个console.php简单使用它:

代码语言:javascript
复制
// 加载Composer代码
require './vendor/autoload.php';

//初始化
$task = new Task();

// 设置非常驻内存
$task->setDaemon(false);

// 设置项目名称
$task->setPrefix('EasyTask');

// 设置记录运行时目录(日志或缓存目录)
$task->setRunTimePath('./Application/Runtime/');

// 1.添加闭包函数类型定时任务(开启2个进程,每隔10秒执行1次你写闭包方法中的代码)
$task->addFunc(function () {
$url = 'https://www.viphper.com';
@file_get_contents($url);
}, 'request', 10, 1);

// 启动任务
$task->start();

我们执行这个脚本:

代码语言:javascript
复制
php console.php start

如果是windows系统,我们看到启动了2个cmd窗口,1个窗口是守护进程,1个是执行上面的每隔10s访问网站的定时任务的进程,测试成功。

那么我们如果不显示cmd执行呢,只需要修改为常驻运行:

代码语言:javascript
复制
// 设置常驻内存
$task->setDaemon(true);

那我们如何添加多个定时任务呢?只需要多调用addFunc方法添加任务进去即可,下面再添加1个15秒的定时任务

代码语言:javascript
复制
$task->addFunc(function () {
$url = 'https://www.viphper.com';
@file_get_contents($url);
}, 'request2', 15, 1);

上面只是说添加任务,那么如何去管理呢?官方给了一个基础的命令整合命令:

代码语言:javascript
复制
// 获取命令
$force = empty($_SERVER['argv']['2']) ? '' : $_SERVER['argv']['2'];
$command = empty($_SERVER['argv']['1']) ? '' : $_SERVER['argv']['1'];

// 配置任务
$task = new Task();
$task->setRunTimePath('./Application/Runtime/');
$task->addFunc(function () {
$url = 'https://www.viphper.com';
@file_get_contents($url);
}, 'request', 10, 2);;

// 根据命令执行
if ($command == 'start')
{
$task->start();
}
elseif ($command == 'status')
{
$task->status();
}
elseif ($command == 'stop')
{
$force = ($force == 'force'); //是否强制停止
$task->stop($force);
}
else
{
exit('Command is not exist');
}

启动任务: php console.php start

查询任务: php console.php status

普通关闭: php console.php stop

强制关闭: php console.php stop force

当然你可可以在任务管理中找到所有进程进行关闭。事实上EasyTask还支持addClass方式添加定时器去执行类的方法,也支持addCommand方法添加定时器去执行cmd或者shell命令,也支持crontab格式的指令。

遇到问题多查一下,可以做出不少的项目。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用实例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档