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

一 需求说明

  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.mfbz.cn/a/559110.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3基本功能介绍

文章目录 Vue3组件中的模板结构可以没有根标签div组合式APIRefReactive函数回顾Vue2响应式Vue3实现响应式对比reactive和refSetup注意点计算属性与监听computedWatchWatchEffectVue3生命周期自定义hook函数toRef其他组合APIshallowReactiveshallowRefreadonly和shallowOnlyToRa…

PostgreSql-Install

PostgreSql源码安装 一、源代码下载二、操作系统配置三、编译安装四、启动数据库五、相关命令 PostgreSQL是一个强大的 开源对象关系数据库系统,它使用并扩展了SQL语言,并结合了许多功能,可以安全地存储和扩展最复杂的数据工作负载。 一、源…

Targeted influence maximization in competitive social networks

abstract 利用口碑效应的广告对于推销产品是相当有效的。在过去的十年中,人们对营销中的影响力最大化问题进行了深入的研究。影响力最大化问题旨在将社交网络中的一小群人识别为种子,最终他们将引发网络中最大的影响力传播或产品采用。在网络营销的实际场…

HTML、CSS常用的vscode插件 +Css reset 和Normalize.css

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 ✍HTML、CSS常用的vscode插件🍎1 HTML 标签同步重命名 – Auto Re…

大型网站系统架构演化实例_7.使用NoSQL和搜索引擎

1.使用NoSQL和搜索引擎 随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持…

【代理模式】静态代理-简单例子

在Java中,静态代理是一种设计模式,它涉及到为一个对象提供一个代理以控制对这个对象的访问。静态代理在编译时就已经确定,代理类和被代理类会实现相同的接口或者是代理类继承被代理类。客户端通过代理类来访问(调用)被…

QT跨平台读写Excel

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

【Linux学习】Linux权限(二)

文章目录 🚀Linux权限管理🚀修改文件的所有者🚀修改文件或目录的所属组🚀同时修改为念的拥有者与所属组🚀文件类型🚀file指令🚀目录权限🚀umask指令🚀粘滞位 &#x1f68…

使用 Docker 部署 instantbox 轻量级 Linux 系统

1)instantbox 介绍 GitHub:https://github.com/instantbox/instantbox instantbox 是一款非常实用的项目,它能够让你在几秒内启动一个主流的 Linux 系统,随起随用,支持 Ubuntu,CentOS, Arch Li…

c#+unity基础

序列化: [SerializeField],点不出来,只能在面板上显示绑定游戏物体 //公有隐藏 特有函数 特有函数:不需要调用,自动执行 Awake最先执行->OnEable 面向对象思想 面向对象思想:分为具体对象和抽象对…

nas如何异地共享文件?

nas异地共享文件是一种通过网络实现不同地区电脑与电脑、设备与设备、电脑与设备之间的文件共享的技术。通过nas(网络附加存储)设备,用户可以在不同地点的电脑或设备之间快速、安全地共享文件和数据。本文将介绍nas异地共享文件的原理以及它在…

day4网络编程作业

#include <myhead.h> #define SER_IP "192.168.125.78" #define SER_PORT 69 #define CLI_IP "192.168.125.176" #define CLI_PORT 4399 //文件上传 void upload(int cfd,struct sockaddr_in sin)//服务器信息结构体传参 {//填充读写请求字符数组--&…

如何查看项目中使用的Qt版本

如何查看项目中使用的Qt版本 1.点击左下角电脑按钮查看Qt版本。 2.点击左侧栏项目按钮查看Qt版本。

代码编辑工具PilotEditPro18.4版本在Windows系统的下载与安装配置

目录 前言一、PilotEdit Pro安装二、使用配置总结 前言 “ PilotEdit Pro是一个功能强大且功能丰富的文本和代码编辑器&#xff0c;可满足程序员、开发人员和IT专业人员的不同需求。定位为一个多功能的编辑解决方案&#xff0c;PilotEdit Pro以其对广泛的文本和代码文件格式的…

【黑马头条】-day11热点文章实时计算-kafka-kafkaStream-Redis

文章目录 今日内容1 实时流式计算1.1 应用场景1.2 技术方案选型 2 Kafka Stream2.1 概述2.2 KafkaStream2.3 入门demo2.3.1 需求分析2.3.2 实现2.3.2.1 添加依赖2.3.2.2 创建快速启动&#xff0c;生成kafka流2.3.2.3 修改生产者2.3.2.4 修改消费者2.3.2.5 测试 2.4 SpringBoot集…

短视频批量采集软件|视频无水印下载提取工具

全新发布&#xff01;DY视频批量下载工具&#xff0c;实现轻松快捷的视频提取 为了更好地满足您的需求&#xff0c;我们自主研发了全新的DY视频批量下载工具。相较于市面上单个视频链接提取的工具&#xff0c;我们的产品更为便捷&#xff0c;不仅支持单个视频链接提取&#xf…

mysql 日环比 统计

接到一个任务&#xff0c;要计算日环比的情况。 16、查询销售额日环比情况 日环比&#xff1a; &#xff08;今日-昨日&#xff09;/ 昨日 的一个比率情况。 1&#xff0c;建表 DROP TABLE IF EXISTS sale; create table sale(id int not null AUTO_INCREMENT,record_date da…

Linux下SPI设备驱动实验:测试读取ICM20608设备中数据是否正常

一. 简介 前面文章实现了 SPI设备的读写功能&#xff0c;也对ICM20608设备中&#xff08;即SPI设备&#xff09;寄存器里的数据进行了读取。文章如下&#xff1a; Linux下SPI设备驱动实验&#xff1a;读取ICM20608设备的数据-CSDN博客 本文对驱动功能进行测试&#xff0c;即…

SpringSecurity源码分析3--UserDetail部分

前言&#xff1a;本章提及的类都是与用户名、密码相关的类 UserDetailsService.class 用于加载用户信息 DaoAuthenticationProvider.class 将数据库的信息拿出来进行认证 AbstractUserDetailsAuthenticationProvider.class DaoAuthenticationProvider的父类&#xff0c;通过模…

基于Web的宠物医院信息管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本宠物医院信息管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…
最新文章