thinkphp3定时任务,tp定时任务,thinkphp定时任务

简介: thinkphp3定时任务,tp定时任务,thinkphp定时任务

本教程使用的定时任务基于EasyTak,EasyTask官方文档:https://gitee.com/392223903/EasyTask

由于tp3.2.x官方开发未考虑命令行支持和绝对路径开发的标准,因此我编写了一个支持的类来运行。

1.在tp3.2.3根目录下安装easytask

composer require easy-task/easy-task
2.创建一个执行命令行的入口文件:console.php

<?php

class ThinkSupport
{

/**
 * argv
 * @var mixed
 */
private $argv;

/**
 * argc
 * @var mixed
 */
private $argc;

/**
 * action
 * @var string
 */
private $action;

/**
 * force
 * @var string
 */
private $force;

/**
 * Support constructor.
 */
public function __construct()
{
    //重置工作目录(only_win_system)
    chdir(dirname(__FILE__));

    //保存Cli_Input
    $this->argv = $_SERVER['argv'];
    $this->argc = $_SERVER['argc'];

    //保存命令并清空Cli_Input
    $this->action = isset($_SERVER['argv']['1']) ? $_SERVER['argv']['1'] : '';
    $this->force = isset($_SERVER['argv']['2']) ? $_SERVER['argv']['2'] : '';
    $_SERVER['argv'] = [] && $_SERVER['argc'] = 0;

    //抑制Tp错误
    if (!isset($_SERVER['REMOTE_ADDR'])) $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
    if (!isset($_SERVER['REQUEST_URI'])) $_SERVER['REQUEST_URI'] = 'localhost';
}

/**
 * 加载Think代码
 * @param Closure $think
 * @return ThinkSupport
 */
public function invokeThink($think)
{
    ob_start();
    $think();
    ob_get_clean();
    return $this;
}

/**
 * 加载你的代码
 * @param Closure $code
 */
public function invokeYourCode($code)
{
    //恢复Cli_Input.(方便自己扩展)
    $_SERVER['argv'] = $this->argv;
    $_SERVER['argc'] = $this->argc;

    //执行
    $code($this->action, $this->force);
}

}

/**

  • Demo

*/
(new ThinkSupport())

->invokeThink(function () {
    //加载tp的代码
    require './index.php';
})
->invokeYourCode(function ($action, $force) {

    // 加载Composer
    require './vendor/autoload.php';

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

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

    // 设置后台运行
    $task->setDaemon(false);

    // 设置日志保存目录
    $task->setRunTimePath('./Application/Runtime/');

    // 添加闭包任务,开2个进程10s执行1次访问网址
    $task->addFunc(function () {
        @file_get_contents('http://xingxinghan.cn/?id=6');
    }, 'RenWu1', 10, 2);

    // 添加执行tp控制器的方法,开1个进程15s执行1次访问网址
    $task->addClass('\Home\Controller\IndexController', 'curl', 'RenWu2', 15, 1);

    // 添加执行系统命令的任务,启动2个进程每隔5s执行一次
    $task->addCommand('php D:/wwwroot/thinkphp_3.2.3_core/test.php', 'RenWu3', 5, 2);

    // 根据命令执行
    if ($action == 'start')
    {
        $task->start();
    }
    if ($action == 'status')
    {
        $task->status();
    }
    if ($action == 'stop')
    {
        $force = ($force == 'force'); //是否强制关闭
        $task->stop($force);
    }
});

3.执行定时任务命令(windows用powershell执行)

php ./console.php start
启动成功输出任务表格

4.查询定时任务(windows用powershell执行)

php ./console.php status
成功输出任务表格

5.关闭定时任务(windows用powershell执行)

php ./console.php stop
6.强制关闭定时任务(windows用powershell执行)

php ./console.php stop force
警告: 由于tp在命令行执行必须要加载一下自己的默认方法,默认方法就是index控制器的index方法,因此此方法必须存在。或者你可以把它设置为空方法。当然如果比并不需要再任务中执行tp的控制器方法,不需要加载tp的东西,可以不执行invokeThink方法。

提示:后台执行失败可修改为前台启动查看问题或者查看日志文件,有问题可以在qq群反馈bug。记得用星星支持我们哦。

目录
相关文章
|
PHP Windows
thinkphp5定时任务,tp5定时任务,thinkphp定时任务,php定时任务,php定时器
thinkphp5定时任务,tp5定时任务,thinkphp定时任务,php定时任务,php定时器
678 0
|
NoSQL Linux MongoDB
MongoDB配置用户名和密码
MongoDB配置用户名和密码
3073 0
|
IDE Java Nacos
IntelliJ Idea如何将设置tab设置为4个空格
IntelliJ Idea如何将设置tab设置为4个空格
2693 0
IntelliJ Idea如何将设置tab设置为4个空格
layui框架实战案例(10):短信验证码60秒倒计时
layui框架实战案例(10):短信验证码60秒倒计时
643 0
|
Linux PHP
Thinkphp5+FastAdmin配置workerman消息推送(多线程)
Thinkphp5+FastAdmin配置workerman消息推送(多线程)
1268 0
|
缓存 Linux
Linux 清空缓存命令
某些时候需要把linux 的缓存清理一下。使用时需要区分参数的不同
838 0
|
11月前
|
安全 API 开发者
Docker Remote API的功能详述及其使用方法。
综上所述,Docker Remote API是管理Docker环境的强大工具,它使得开发者能够更灵活地集成和自动化Docker相关的操作。通过遵循Docker守护进程的安全配置标准和正确使用HTTP请求,可以有效地控制Docker守护进程,实现高效的容器管理和自动化部署。
335 0
|
10月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1417 1
|
SQL 安全 测试技术
Thinkphp网站漏洞怎么修复解决
THINKPHP漏洞修复,官方于近日,对现有的thinkphp5.0到5.1所有版本进行了升级,以及补丁更新,这次更新主要是进行了一些漏洞修复,最严重的就是之前存在的SQL注入漏洞,以及远程代码执行查询系统的漏洞都进行了修复,官方本以为没有问题了,但是在实际的安全检测当中发现,还是存在问题,还是可以远程代码进行注入,插入非法字符,提交到服务器后端中去。
Thinkphp网站漏洞怎么修复解决