最新公告
  • 欢迎您光临站长源码网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 帝国cms定时审核功能中用swoole实现毫秒级审核/swoole中毫秒定时器(Timer)的使用

    正文概述 管理员   2024-09-02   11

    前两天研究了一下帝国cms的定时审核,发现用定时审核插件配合宝塔计划任务中的定时访问url只能实现最低单位分钟的审核。很不爽。

    研究了一下Swoole的毫秒定时器(Timer)的使用,觉得完美。以下是方法:

    1、安装好自动审核插件

    2、在PHP扩展里安装好swool扩展,我运行的是PHP7.4

    安装完毕后重启PHP,运行

    php --ri swoole
    

    命令查看swool是否正确安装。

    3、在PHP7.4运行的网站下任意位置创建PHP文件,自己随意命名。代码如下:

    <?php
    date_default_timezone_set('Asia/Shanghai'); // 设置正确的时区
    
    // 要访问的URL
    $url = 'https://www.zhann.cn/e/admin/extend/whiletask/docheck.php?classid=news&pwd=ad888888';
    
    // 定义开始和结束时间
    $start_time = strtotime(date('Y-m-d') . ' 08:00:00');
    $end_time   = strtotime(date('Y-m-d') . ' 22:00:00');
    
    $logdir = __DIR__ . '/log'; // 使用当前脚本所在的目录
    
    if (!is_dir($logdir)) {
        mkdir($logdir, 0777, true);
    }
    
    // 清理旧的日志文件
    foreach (glob("$logdir/*.log") as $logfile) {
        if (filemtime($logfile) < strtotime('-3 days')) {
            unlink($logfile);
        }
    }
    
    \Swoole\Timer::tick(188 * 1000, function($timer_id) use ($url, $start_time, $end_time, $logdir) {
        $current_time = time();
        
        // 检查当前时间是否在指定的范围内
        if ($current_time > $start_time && $current_time < $end_time) {
            file_get_contents($url); // 访问URL
    
            // 记录日志
            $logfile = "$logdir/" . date('Y-m-d') . '.log';
            $log = date('H:i:s') . " - 访问了URL: $url\n";
            file_put_contents($logfile, $log, FILE_APPEND);
        } else {
            // 如果不在时间范围内,则停止定时器
            \Swoole\Timer::clear($timer_id);
    
            // 记录日志
            $logfile = "$logdir/" . date('Y-m-d') . '.log';
            $log = date('H:i:s') . " - 停止了定时器\n";
            file_put_contents($logfile, $log, FILE_APPEND);
        }
    });
    
    \Swoole\Event::wait();
    
    ?>
    

    
    

    说明:https://www.zhann.cn/e/admin/extend/whiletask/docheck.php?classid=news&pwd=ad888888 改为你自己定时审核插件的审核访问url地址。以上代码中我设置了每天早8点到晚22点,每隔188秒访问一次url,大哥们可以根据自己的需要调整时间,期中1秒=1000毫秒,自己改。

    4、宝塔面板设置:

    计划任务 – Shell脚本 – 任务名称(自拟)- 执行周期(每天几点开始)- 脚本内容(代码如下):

    /www/server/php/74/bin/php /www/wwwroot/sh.zhann.cn/xxxx.php
    

    说明:/www/server/php/74/bin/php 是你对应的PHP版本安装路径,/www/wwwroot/sh.zhann.cn/xxxx.php 是以上PHP文件的存放路径

    添加任务,大功告成!

    附:如果任务已经执行,如何结束它呢?首先,你需要找到这个PHP脚本的进程ID。你可以使用ps命令配合grep命令来搜索这个进程。下面是一个示例命令:

    ps aux | grep xxxx.php
    

    xxxx.php是你运行的Php文件名

    然后使用以下代码来结束它:

    kill 12345
    

    请用你的实际进程ID替换上面的12345

    如果进程不能被正常结束,你可以尝试使用kill命令的-9选项强制结束进程:

    kill -9 12345
    

    ////////////////////////////////////////////////////////////////////////////////

    宝塔面板添加计划任务 shell脚本  脚本内容:/www/wwwroot/sh.zhann.cn/1/check.sh

    check.sh内容

    #!/bin/bash
    
    # 要执行的脚本命令
    command="/www/server/php/74/bin/php /www/wwwroot/sh.zhann.cn/1/shenhe.php"
    
    # 检查是否已经有相同的进程在运行
    count=$(ps aux | grep "$command" | grep -v grep | wc -l)
    
    if [ $count -gt 0 ]; then
        echo "已经有相同的进程在运行"
    else
        # 执行脚本命令
        eval $command
        exit_code=$?
        if [ $exit_code -eq 0 ]; then
            echo "恭喜,任务执行成功!"
        else
            echo "任务执行失败,错误码:$exit_code"
        fi
    fi
    
    


    站长源码网 » 帝国cms定时审核功能中用swoole实现毫秒级审核/swoole中毫秒定时器(Timer)的使用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    支付宝支付
    余额支付
    ×
    微信扫码支付 0 元