宝塔设置PHP定时任务实战记录(定时任务、ajax异步刷新API、shell脚本、访问url)

简介: 宝塔设置PHP定时任务实战记录(定时任务、ajax异步刷新API、shell脚本、访问url)

项目需求

  • 爬取第三个API数据,将数据进行过滤后,添加到mysql数据库;
  • 设置为定时任务;
  • 多个接口多个数据表和入库;


生产环境

  • php+mysql语言开发;
  • 宝塔控制面板;


一、php定时任务

php是世界上最好的语言,但是最不擅长的恐怕就是定时任务了吧?PHP只能被用户触发,被调用,调用后会自动退出内存,没有常驻内存。如果系统访问量大,可以当用户访问的时候,进行事件触发做定时任务;但是如果基本上没有访问量,就是纯设置定时任务怎么办?


二、实战开发

1.创建mysql数据表

代码如下:

--
-- 表的结构 `po_log`
--
CREATE TABLE IF NOT EXISTS `po_log` (
  `log_id` int(11) NOT NULL,
  `user_name` varchar(64) DEFAULT NULL,
  `logs` varchar(255) DEFAULT NULL,
  `equipment` varchar(50) DEFAULT NULL,
  `log_time` int(11) DEFAULT NULL,
  `log_ip` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统操作日志';


2.入库封装函数

基于前后端分离的业务场景,采用API接口的形式进行开发。

(1)封装入库

   public function putLogs()
    {
        //添加日志
        $rand_Name = serial_num(rand(0, 61));
        addlogs($rand_Name, rand(0, 61), 'LOCKDATAV机器人模拟数据', time(), getip());
        $res["data"] = "OK";
        die(json_encode_lockdata($res));
    }


(2)入库操作

function addlogs($user_name = 'LOCKDATA', $logs = '', $equipment = '', $logtime = '', $logip = '')
{
    global $db;
    dbc();
    if (!class_exists('getEquipmentInfo')) {
        require '../libs/equipment.class.php';
    }
    $newobj = new getEquipmentInfo();
    if ($equipment == "") {
        $equipment = "操作系统:" . $newobj->GetOs() . ",浏览器:" . $newobj->GetBrowser() . ",语言:" . $newobj->GetLang();
    }
    $db->insert('log', array('user_name' => $user_name, 'logs' => $logs, 'equipment' => $equipment, 'log_time' => $logtime, 'log_ip' => $logip));
}


3.定时任务的实现

(1)$ajax异步调用法

采用$ajax异步调用API接口,进行数据更新入库,采用该方法的原因:

  • 将$ajax封装函数,进行定时轮询,从而刷新API接口予以更新数据;
  • 将该页面设置为实时页面,实现定时刷新的目的;

缺点在于:

需要单独打开该页面,在客户端浏览器不断的刷新。无论是运行在服务器端还是单独一个客户端运行该页面,都存在弊端。为此,舍弃该方式。

  //API调用说明
    $(function () {
        $.ajax({
            type: 'get',
            url: "http://test.com/cron/api/api.php?act=putLogs&token=3cab7ce41***",
            data: {},
            dataType: "json",
            success: function (res) {
                console.log(res);
            },
            error: function (err) {
                console.log(err);
            }
        });
    })


(2)宝塔定时访问url

能否设置定时任务,直接访问http://test.com/cron/实现呢?

宝塔–计划任务–添加计划任务

我们发现计划执行成功了,但是却没有执行$ajax。其原因在于:宝塔访问url是通过curl方式抓取页面的,无法执行js客户端代码。本方案失败!


(3)宝塔定时直接访问API(★★★)

设置为定时2分钟访问php的API接口,数据定时更新成功。

(4)Shell脚本访问php(★★★)

  • 新建php原生脚本corn.php
require 'conf/dbc.php';
require 'conf/common.php';
$rand_Name = serial_num(rand(0, 10));
addlogs($rand_Name, rand(0, 10), 'LOCKDATAV机器人模拟数据--SHELL', time(), getip());


  • 新增shell任务
/www/server/php/55/bin/php /www/wwwroot/lbs.lockdata.cn/cron/cron.php

/www/server/php/55/bin/php指PHP运行环境

/www/wwwroot/lbs.lockdata.cn/cron/cron.php 指访问的php文件

  • 成功入库

总结

在实际测试的过程中,还尝试了curl语法以及常见的不顾死活的php定时方式。取决于项目需求的限制,目前采用的方式就是上述★★★的解决方案:一种匹配API接口的方式直接访问url;一种是直接访问php脚本。@漏刻有时

相关文章
|
2月前
|
缓存 边缘计算 监控
89_批量推理:异步API调用
在当今数据密集型应用和大模型部署的时代,批量推理已成为提升系统性能和资源利用率的关键技术。随着深度学习模型规模的不断扩大和应用场景的日益复杂,如何高效地处理大量推理请求成为技术团队面临的重要挑战。传统的同步API调用方式在面对高并发、大规模数据处理时,往往会遇到响应延迟高、资源利用不充分等问题。异步API调用作为一种更高效的处理模式,通过非阻塞操作和并发处理能力,为批量推理场景提供了理想的解决方案。
|
5月前
|
JSON JavaScript 前端开发
Python+JAVA+PHP语言,苏宁商品详情API
调用苏宁商品详情API,可通过HTTP/HTTPS发送请求并解析响应数据,支持多种编程语言,如JavaScript、Java、PHP、C#、Ruby等。核心步骤包括构造请求URL、发送GET/POST请求及解析JSON/XML响应。不同语言示例展示了如何获取商品名称与价格等信息,实际使用时请参考苏宁开放平台最新文档以确保兼容性。
|
8月前
|
监控 NoSQL 算法
百万级URL重定向工程:大规模网站架构设计与性能优化实战
本文深入探讨了大规模重定向系统的核心挑战与解决方案,涵盖技术瓶颈分析、分布式架构设计、十亿级URL处理策略、全球化部署方案及全链路监控体系。通过数学建模与性能优化,提出三层架构模型,并结合一致性哈希分片算法实现高效路由。同时,对比不同架构的吞吐量与容灾能力,分享某电商平台实践案例,展示性能显著提升。最后展望重定向即服务(RaaS)未来趋势,包括AI动态路由、量子安全跳转和边缘智能等关键技术,为企业提供扩展性强、稳定性高的系统设计参考。
334 25
|
9月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JSON 数据挖掘 API
如何使用PHP开发1688商品详情API接口
本文详细介绍了如何使用PHP开发1688商品详情API接口,涵盖从注册账号、申请权限、配置环境到代码实现的全过程。通过设置请求头、参数及生成签名,利用cURL或GuzzleHttp库发送请求并处理响应,最终实现商品详情数据的获取与应用,助力电商发展。
195 1
|
API PHP 数据库
PHP中哪个框架最适合做API?
在数字化时代,API作为软件应用间通信的桥梁至关重要。本文探讨了PHP中适合API开发的主流框架,包括Laravel、Symfony、Lumen、Slim、Yii和Phalcon,分析了它们的特点和优势,帮助开发者选择合适的框架,提高开发效率、保证接口稳定性和安全性。
490 3
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
250 2
|
API C#
异步轮询 Web API 的实现与 C# 示例
异步轮询 Web API 的实现与 C# 示例
381 1
|
JSON API PHP
如何使用PHP开发API接口?
本文详细介绍了如何使用PHP开发API接口,涵盖从基础概念到实战步骤的全过程。首先解释了API接口的基本原理,包括HTTP协议、REST架构风格、JSON格式和OAuth认证机制。接着介绍了开发环境的设置,包括PHP安装、Web服务器配置、数据库设置等。文章还探讨了API开发的完整流程,从需求确定、框架选择、端点设计到代码编写、测试、安全性考量及性能优化。最后通过一个实战案例演示了如何创建一个简单的API端点,并讨论了部署与监控的方法。
601 0
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用