ThinkPHP6 自定义指令(定时任务脚本 )使用技巧
背景
- 项目运行过程中,有些任务需要定时去跑,比如定时获取当前关注公众号的用户,给与奖品发放的需求
一种解决方式:直接使用Linux
的 [crontab] 计划任务,设定执行链接就好
另一种方式:为了方便对自定义指令的统一管理,可以编写shell
执行脚本
【ThinkPHP6 自定义指令】
▶ 使用技巧
- 指令:
php think [command_name]
# 提示:个人习惯,对统一模块下的指令,设定一个参数以作区分,这样就减少了自定义类文件的创建
crontab -e
计划任务:
### shell监控
* * * * 6 /svr/join.weiq.com/project/zcweiq/app/shell/check_cron.sh /usr/bin/php73 /svr/join.weiq.com/project/zcweiq/runtime/cron >> /svr/join.weiq.com/project/zcweiq/runtime/log/checkcron.log 2>&1 &
shell
脚本执行命令参考:
#!/bin/bash
#cronTab 的启动
appPath=$(cd "$(dirname "$0")";cd "../../";pwd);
phpPath=$1 # php 命令
logPath=${appPath}/runtime/cron # 日志保存目录if [[ ! -d ${logPath} ]]; thenmkdir -p ${logPath}
fidateSuffix=`date +%Y%m%d` # 日志日期后缀curr_date=`date "+%Y-%m-%d %H:%M:%S"`
month=`date +%-m`
day=`date +%-d`
hour=`date +%-H`
minute=`date +%-M`
second=`date +%-S``# 任务成本计算, 每月10号 凌晨3点执行
if [[ "$day" -eq "10" && "$hour" -eq "3" && "$minute" -eq "0" ]]; thenpid=`ps -ef | grep "think task_clock one_month_cost" | grep -v grep | awk '{print $2}'`if [[ ! -n "$pid" ]]; then${phpPath} ${appPath}/think task_clock one_month_cost >> ${logPath}/task_one_month_cost.log.${dateSuffix} 2>&1 &fi
fi# 发送消息队列(常驻队列)
pid=`ps -ef | grep "think message_send" | grep -v grep | awk '{print $2}'`
if [[ ! -n "$pid" ]]; then${phpPath} ${appPath}/think message_send >> ${logPath}/message_send.log.${dateSuffix} 2>&1 &
fi# 设定每20分钟执行,招募活动 开始时间后的入队
if [[ `expr $minute % 20` -eq "0" ]]; thenpid=`ps -ef | grep "think message_send new_task_query" | grep -v grep | awk '{print $2}'`if [[ ! -n "$pid" ]]; then${phpPath} ${appPath}/think message_send new_task_query >> ${logPath}/new_task_query.log.${dateSuffix} 2>&1 &fi
fi
▶ 附录:
☞ shell
脚本操作知识点
- 创建脚本命令:
touch check_cron.sh
- 然后,需要对脚本赋予权限:
chmod -R 755 check_cron.sh
- 新建的文件,如果要其生效,需要执行如下命令:
./check_cron.sh
☞ 如果脚本中的部分指令不执行
此时出现的情况就是,没有生成对应日期的 log 日志
- 此时,先查询下是否存在对应的进程(参考
ps -ef | grep message_send
)
存在就先kill
掉,然后重新启用脚本
☞ 参考:
【Linux – Date formatting】
【编写shell 脚本所需的语法和示例】
ThinkPHP6 自定义指令(定时任务脚本 )使用技巧相关推荐
- 关于Angularjs中自定义指令一些有价值的细节和技巧
作者:心叶 时间:2018-04-22 10:58 一:自定义指令常用模板 下面是大致的说明,不是全面的,后面来具体说明一些没有提及的细节和重要的相关知识: angular.module('yello ...
- 【前端技巧】JS自定义指令 —— 无限滚动(改写el-table-infinite-scroll)
@Author:Outman @Date:2023-03-08 JS自定义指令 -- 无限滚动(改写el-table-infinite-scroll) 自定义指令实现 // directives/in ...
- 【django】使用django-crontab执行django自定义指令
django-crontab 部署 需求:再指定的时间内输入django的自定义指令,来进行一些需求的操作. 使用流程: 1.安装: pip install django-crontab 2.配置 s ...
- vue点击改变data值_vue 中自定义指令改变data中的值
通过局部自定义指令实现了一个拖动的指令 html: script: methods:{ set(x,y){ this.data.x=x; this.data.y=y; } }, directives: ...
- vue自定义指令封装节流_Vue自定义指令封装节流函数的方法示例
节流函数是web前端开发中经常用到的一个开发技巧,在input实时搜索,滚动事件等,为了避免过多消耗性能,我们都会使用节流函数.在<JavaScript高级程序设计>一书中有这样的一个例子 ...
- builtins自定义_ng-repeat里创建的自定义指令
在ng里,所有的指令在按照意愿正常工作之前的都需要编译一下,包含angularJS的自定义指令. ng模板里的所有指令都会在angularJS加载完毕之后编译一下,所以那些自定义指令和事件才能工作. ...
- 【15】Vue:02-Vue表单基本操作、表单修饰符、自定义指令、计算属性computed、侦听器watch、过滤器、生命周期、数组变异方法、替换数组、动态数组响应数据、图书列表案例、TODOS案例
文章目录 day02 Vue常用特性 表单基本操作 表单修饰符 自定义指令 Vue.directive 注册全局指令 Vue.directive 注册全局指令 带参数 自定义指令局部指令 计算属性 c ...
- vue之vue的生命周期、swiper、自定义组件的封装、自定义指令、过滤器、单文件组件及vue-cli
文章目录 1.vue的生命周期 1.1.8个生命周期函数 2.swiper 3.自定义组件的封装 4.自定义指令 4.1.定义 4.2.基本使用 4.3.利用自定义指令传入指定参数修改背景色 5.过滤 ...
- freemarker自定义指令及方法
"一节复一节,千枝攒万叶"竹子每生长一段就会总结一下打个节,今天我也总结一下最近处理的一个小问题,希望我的小节,对各位看官有所帮助. 背景描述: 最近项目做了一个月报功能,由于生产 ...
最新文章
- 七牛云上传文件之表单上传文件
- C++数组与指针回顾总结
- 让input变成不可编辑状态的方法
- 测试驱动陷阱,第2部分
- mysql当时读_Mysql事务以及四中隔离级别实例2以及InnoDB如何解决当时读的幻读问题...
- Python图像处理丨OpenCV+Numpy库读取与修改像素
- column分栏布局只是文字布局吗_CSS3 column 分栏
- [转]利用处理程序错误攻击(下)
- 丹佛机场行李系统处理方案
- opencv-python 图像基础处理(三)
- 1.GraphPad Prism 8软件安装
- iOS7新特性的兼容性处理方法
- 《士兵突击》,不抛弃,不放弃
- Mac下安装Hadoop
- 文旅农康展新貌,雷山乡村更振兴
- NodeMCU入门,烧程序点灯。
- 上海人代会:代表聚焦自贸区新片区建设
- (一)shell中常用的基础命令
- STM32野火教程学习笔记
- Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF