PHP定时任务框架taskPHP3.0学习记录4宝塔面板bash定时任务(轮询指定json文件字段后确定是否执行、环境部署、执行日志、文件权限)

news2025/1/12 18:06:24

一 需求说明

  1. 宝塔面板中,读取指定 /www/wwwroot/lockdata/cron/webapp.json文件;
  2. 配置定时任务脚本task.sh;
  3. 当读取webapp.json中,如果cron_task=1,则执行任务php start.php start命令行;
  4. 完成命令后,执行cron_task=0和"cron_time=当前执行时间;
  5. 记录日志;
  6. 宝塔设置定时任务;
  7. webapp.json,由web后台系统生成;task.sh轮询读取后,需恢复www和root用户权限的切换;

二 环境部署

1.指定文件webapp.json

  • 文件内容
{
  "cron_task": 0,
  "cron_time": "2024-04-19 10:50:01"
}

  • 文件用户权限 www 755
    在这里插入图片描述

2.安装jq和检验

要安装jq并检验是否已安装,根据所使用的Linux发行版使用相应的包管理器。安装方法如下:

对于CentOS/RHEL系统:

首先,需要启用EPEL(Extra Packages for Enterprise Linux)仓库,然后使用yum安装jq

sudo yum install epel-release
sudo yum install jq

同样,安装完成后,可以通过运行jq --version来检验是否安装成功。

检验是否安装过

如果确定是否已经安装了jq,可以直接在终端中输入jq --version。如果系统返回了jq的版本信息,那就说明已经安装过了。如果系统提示找不到jq命令,那就说明还没有安装,或者jq没有安装在系统的PATH环境变量所包含的目录中。在这种情况下,需要按照上述步骤进行安装。

三 执行脚本task.sh

#!/bin/bash  
  
# 定义工作目录和JSON配置文件路径  
#!/bin/bash  
  
# 获取脚本所在的绝对路径  
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"  
  
# 定义工作目录为脚本所在的目录  
WORKDIR="$SCRIPT_DIR"  
  
# JSON配置文件的路径为工作目录下的一个子目录或文件  
JSON_CONFIG="$WORKDIR/webapp.json"

# 获取当前时间并格式化为"YYYY-MM-DD HH:MM:SS"  
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")  

# 日志属性设置
LOG_DIR="$(pwd)/logs"  # 日志文件存放的目录  
TODAY=$(date +"%Y-%m-%d")  # 获取当前日期  
LOG_FILE="${LOG_DIR}/${TODAY}_cron.log"  # 定义日志文件名,包含日期  

# 确保日志目录存在  
mkdir -p "$LOG_DIR"  

# 检查JSON配置文件是否存在  
if [ ! -f "$JSON_CONFIG" ]; then  
    echo "Msg:$JSON_CONFIG JSON configuration file missing."  
    echo "[$CURRENT_TIME]Msg:taskPHP JSON configuration file missing." >> "$LOG_FILE"  
    exit 1  
fi  
  
# 读取JSON配置文件中的cron_task值  
cron_task=$(jq -r '.cron_task' "$JSON_CONFIG")  
  
# 检查是否应该执行cron任务  
if [ "$cron_task" -eq 1 ]; then  
    echo "Msg:taskPHP scheduled in progress."  #taskPHP定时任务CRON执行中
    echo "[$CURRENT_TIME]Msg:taskPHP scheduled in progress." >> "$LOG_FILE"  
      
    # 切换到工作目录  
    cd "$WORKDIR" || exit 1  
    
    # 获取JSON配置文件的原始权限和所有者  
    ORIGINAL_OWNER=$(stat -c %U "$JSON_CONFIG")  
    ORIGINAL_GROUP=$(stat -c %G "$JSON_CONFIG")  
    ORIGINAL_PERMISSIONS=$(stat -c %a "$JSON_CONFIG")  
    
   
   # 更新JSON文件  
   jq --argjson cron_task 0 --arg cron_time "$CURRENT_TIME" '.cron_task=$cron_task | .cron_time=$cron_time' "$JSON_CONFIG" > "$JSON_CONFIG.tmp" && {  
    # 如果jq命令成功,则移动临时文件到原始位置并设置原始权限  
    mv "$JSON_CONFIG.tmp" "$JSON_CONFIG" &&  
    chown "$ORIGINAL_OWNER:$ORIGINAL_GROUP" "$JSON_CONFIG" &&  
    chmod "$ORIGINAL_PERMISSIONS" "$JSON_CONFIG"  
    echo "[$CURRENT_TIME]Msg:taskPHP has been reset to 0 and original rights have been maintained." >> "$LOG_FILE"  
    } 
   
   # 检查上一步是否成功,并据此向日志文件中添加相应的信息  
   if [ $? -eq 0 ]; then  
      echo "[$CURRENT_TIME]Msg:taskPHP has completed execution." >> "$LOG_FILE"  #完成更新
   else  
      echo "[$CURRENT_TIME]Msg:taskPHP incomplete execution." >> "$LOG_FILE"  #未完成更新
   fi 
  
  # 输出更新后的JSON内容(可选,用于验证)  
  # cat "$JSON_CONFIG" 
    
      
    # 执行PHP脚本  
    php start.php start  
      
    # 如果需要等待一段时间再执行exit,可以添加sleep命令  
    # sleep 600  # 等待10分钟  
      
else  
    echo "Msg:taskPHP has no task execution status."  #taskPHP无执行任务状态
    echo "[$CURRENT_TIME]Msg:taskPHP has no task execution status." >> "$LOG_FILE"  
fi

四 定时执行

执行脚本

/www/wwwroot/lockdata/cron/task.sh

在这里插入图片描述
即完成定时任务的设置

五 执行日志

执行进程1

在这里插入图片描述

执行进程2

在这里插入图片描述

进程错误:Address already in use

[10:40:18][taskPHP]:socket_bind err:Address already in use

  • 解决方案:使用命令行结束任务,然后再执行启动任务即可
    # 结束任务
    php start.php close all

正常进程

在这里插入图片描述


@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1609423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AJAX——图书管理案例

1.渲染列表 自己的图书数据:给自己起个外号,并告诉服务器,默认会有三本书,基于这三本书做数据的增删改查。 // 目标1:渲染图书列表 // 1.1 获取数据 // 1.2 渲染数据const creator 哈哈 // 封装-获取并渲染图书列表函…

使用共振峰提取元音因素/从声音生成口型动画

视频效果 我前段时间研究了下从声音提取共振峰的方法。今天测试了下实际效果。 我使用一段33秒的女声视频,提取原因后使用静态视位图序列生成了一个视频,效果如下: b站视频:https://www.bilibili.com/video/BV1JD421H7m9/?vd_s…

前端开发与html学习笔记

一、前端开发概述 前端开发:也叫做web前端开发,它指的是基于web的互联网产品的页面(也可叫界面)开发及功能开发互联网产品:指网站为满足用户需求而创建的用于运营的功能及服务,百度搜索、淘宝、QQ、微博、网易邮箱等都是互联网产…

Postman调用OpenApi接口

首先你需要科学上网。。。。。 请求方式:post 请求地址:https://api.openai.com/v1/chat/completions 请求头: Authorization : Bearer key Content-Type : application/json Body : { "messages": [{ "role": &quo…

基于SSM+Jsp+Mysql的房屋租赁系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

【C++打怪之路】-- C++开篇

🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ &…

得物sign参数逆向分析与Python算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. Python算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚…

C++修炼之路之继承<二>

目录 一:子类的六大默认成员函数 二:继承与友元 三:继承与静态成员 四:复杂的继承关系菱形继承菱形虚拟继承 1.单继承 2.多继承 3.菱形继承;一种特殊的多继承 4.菱形虚拟继承 5.虚拟继承解决数据冗余和二…

Spectre-v1 简介以及对应解决措施

文章目录 前言一、Variant 1: Exploiting Conditional Branches.二、 BACKGROUND2.1 Out-of-order Execution2.2 Speculative Execution2.3 Branch Prediction2.4 The Memory Hierarchy2.5 Microarchitectural Side-Channel Attacks2.6 Return-Oriented Programming 三、 ATTAC…

阿里云OSS 存储对象的注册与使用

目录 一、什么是阿里云OSS 二、 点击免费试用 2.1 选择第一个,点击免费试用 ​编辑 2.2 登录管理控制台 2.3 进入Bucket 2.4、在阿里云网站上的个人中心配置Accesskey,查询accessKeyId和accessKeySecret。 2.5、进入AccssKey管理页面应该会出现下图提示&…

前端从零到一搭建脚手架并发布到npm

这里写自定义目录标题 一、为什么需要脚手架?二、前置-第三方工具的使用1. 创建demo并运行-4步新建文件夹 zyfcli,并初始化npm init -y配置入口文件 2.commander-命令行指令3. chalk-命令行美化工具4. inquirer-命令行交互工具5. figlet-艺术字6. ora-lo…

QT跨平台读写Excel

QT跨平台读写Excel 背景Excel工具CMakeLists.txt工程目录 背景 开发框架QT,makefile构建工具CMake,编译器MinGW Excel工具 考虑跨平台则不能使用针对微软COM组件的QAxObject来读写Excel,因此使用开源QtXlsx。 这里是将QXlsx当做源码嵌入使…

门禁管理系统服务器如何内网映射让外网访问?

禁管理系统整体解决方案,可实现请假出入联动、门状态监控、电子地图、非法闯入报警、远程开门、红外防夹、智能统计等功能,应用非常广泛。 如果门禁管理系统部署在没有公网IP的本地服务器上,如何设置,能让外网互联网上也能登录访问内部的管理…

亚马逊云科技AWS CloudUp for Her送亚马逊认证考试50%优惠券活动

最近总有小伙伴问小李哥,有没有送AWS考试50%优惠券的活动?这次送云从业者(cloud practitioner)、助理级架构师(SAA)考试50%优惠券活动就来了! 本次活动叫AWS CloudUp for Her,完成免费在线培训课程即可获得AWS证书考试50%折扣券&a…

ZooKeeper设置监听器

ZooKeeper设置监听器,通过getData()/getChildern()/xists()方法。 步骤: 1.创建监听器:创建一个实现Watcher接口的类,实现process()方法。这个方法会在ZooKeeper向客户端发送一个Watcher事件通知的时候被调用。 2.注册监听器&…

Servlet第四篇【request对象常用方法、应用】

什么是HttpServletRequest HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。 简单来说,要得…

蓝桥杯竞赛类型:Web应用开发 全程详解

既然大家准备报名蓝桥杯,那么对蓝桥杯就应该有一定的了解了。没有了解也没关系,简单来说,蓝桥杯就是一个计算机竞赛,竞赛类型大多是使用各种语言写算法,当然还有本文的主体——Web应用开发。对蓝桥杯有了基本了解之后&…

C#使用PaddleOCR进行图片文字识别✨

PaddlePaddle介绍✨ PaddlePaddle(飞桨)是百度开发的深度学习平台,旨在为开发者提供全面、灵活的工具集,用于构建、训练和部署各种深度学习模型。它具有开放源代码、高度灵活性、可扩展性和分布式训练等特点。PaddlePaddle支持端…

IntelliJ IDEA2020下使用Maven构建Scala 项目

1.创建maven文件 2.进入pom.xml导入依赖 <!--添加spark的依赖--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.2.1</version></dependency><!--添加scala依…

【ONE·基础算法 || 栈 】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解以栈此类数据结构为主的题型。       文章目录 总言1、栈2、删除字符中的所有相邻重复项&#xff08;easy&#xff09;2.1、题解 3、比较含退格的字符串&#xff08;easy&#xff09;3.1、题解 4、基本计算器 II&a…