宝塔设置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脚本。@漏刻有时

相关文章
|
6月前
|
存储 关系型数据库 MySQL
深入浅出PHP:从基础到实战
【9月更文挑战第20天】本文将带你走进PHP的世界,从最基础的语法开始,逐步深入到实战应用。我们将通过实例讲解PHP的核心概念,如变量、控制结构、函数等,然后介绍如何使用PHP进行数据库操作和文件处理。最后,我们将展示如何用PHP构建一个简单的博客系统,让你在实践中掌握PHP的应用。无论你是编程新手,还是有一定经验的开发者,都能在这篇文章中找到有价值的信息。让我们一起探索PHP的魅力吧!
|
2月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
80 20
|
4月前
|
编译器 PHP 开发者
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
66 1
|
4月前
|
存储 Serverless PHP
PHP编程入门:从基础到实战
【10月更文挑战第35天】本文将带你走进PHP的世界,从最基本的语法开始,逐步深入到实际应用。我们将通过简单易懂的语言和实际代码示例,让你快速掌握PHP编程的基础知识。无论你是初学者还是有一定经验的开发者,都能在这篇文章中找到你需要的内容。让我们一起探索PHP的魅力吧!
|
4月前
|
自然语言处理 安全 PHP
深入浅出PHP编程:从基础到实战
【10月更文挑战第36天】本文将带你走进PHP的奇妙世界,无论你是初学者还是有一定经验的开发者,都将从中获益。文章首先介绍PHP的基础概念和语法,然后通过实际代码示例,展示如何利用PHP进行高效的Web开发。最后,我们将探讨一些高级主题,如面向对象编程、数据库操作以及安全性问题。让我们一起开启PHP的学习之旅吧!
|
4月前
|
前端开发 中间件 PHP
PHP框架深度解析:Laravel的魔力与实战应用####
【10月更文挑战第31天】 本文作为一篇技术深度好文,旨在揭开PHP领域璀璨明星——Laravel框架的神秘面纱。不同于常规摘要的概括性介绍,本文将直接以一段引人入胜的技术剖析开场,随后通过具体代码示例和实战案例,逐步引导读者领略Laravel在简化开发流程、提升代码质量及促进团队协作方面的卓越能力。无论你是PHP初学者渴望深入了解现代开发范式,还是经验丰富的开发者寻求优化项目架构的灵感,本文都将为你提供宝贵的见解与实践指导。 ####
|
4月前
|
存储 Java PHP
PHP编程之旅:从基础到实战
【10月更文挑战第23天】本文将带你走进PHP的世界,探索这个流行的服务器端脚本语言的魅力。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的信息和实用的代码示例。我们将从PHP的基本概念开始,然后深入到实际应用中,最后通过一个实战项目来巩固所学知识。让我们一起开启这段激动人心的PHP编程之旅吧!
42 0
|
6月前
|
设计模式 数据管理 测试技术
PHP中的设计模式:单一职责原则在实战项目中的应用
在软件开发中,设计模式是解决问题的最佳实践。本文通过分析单一职责原则(SRP),探讨了如何运用这一原则来提升PHP项目的可维护性和扩展性。我们将从实际案例出发,展示单一职责原则在业务逻辑分离、代码解耦和提高测试效率方面的应用。无论是新手还是经验丰富的开发者,都能从中获益,进而编写出更健壮、更灵活的PHP代码。
60 5
|
6月前
|
设计模式 安全 PHP
PHP中的设计模式:单一职责原则在实战中的应用
在软件开发中,设计模式是解决常见问题的成熟方案。本文将通过分析单一职责原则这一设计原则,探讨如何在PHP应用程序中应用这一原则来提高代码的可维护性、扩展性和灵活性。我们将从实际案例出发,展示单一职责原则的具体应用方法,并解释其对项目开发周期和质量的积极影响。无论你是PHP初学者还是经验丰富的开发者,都能从中获益,提升你的编程实践水平。
47 4
|
6月前
|
前端开发 PHP 数据库
PHP编程入门:从基础到实战
【9月更文挑战第23天】本文将引导你进入PHP编程的世界,从基础知识到实际项目应用,逐步深入。我们将一起探索PHP的基本语法、常用函数和框架使用,以及如何在实际项目中运用PHP进行开发。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的参考和启示。让我们一起踏上PHP编程的学习之旅吧!

热门文章

最新文章