最近做一个活动,需要用到定时任务,于是使用了 node-schedule 库。

  用法很简单,就是可配置开始、结束时间,以及重复执行的时间点,如下所示,从2020-12-23T09:00:00Z开始,每10分钟执行一次,直至2020-12-23T09:30:30Z结束。

schedule.scheduleJob({
start: '2020-12-23T09:00:00Z',
end: '2020-12-23T09:30:30Z',
rule: '* */10 * * * *'
}, test);

一、时间修改困难

  如果是需要在未来某个时间段执行的定时任务,那么要还原真实场景,就得修改服务器时间。

  测试环境虽然可以改时间,但是我们这边是几个组共用几台服务器,修改了时间后,可能会影响其他组的业务,并且正式环境的时间是不能修改的。

  一开始测试的时候,改过几次时间,改时间毕竟太繁琐,每次代码发布,服务器的时间就又会重置,又要修正一次,还收到了其他组的投诉。

  后面就改成今天的时间段,这次的定时任务的时间段有7个,每次修改好后,就要提交一遍代码,然后合并分支,最后发布一下代码,服务也会重新启动。

  这种纯手工方式过于费时,后面想到可以在后台做个通用配置(下图是个配置列表),将这些常量(例如时间参数)存在数据库(例如MongoDB或MySQL)中,可随时读写。

  

  下图是个增和改的弹框,在新增的时候需要格式化多行文本中的JSON数据,先用 eval(),再用JSON.stringify(),这样的话在调用JSON.parse()的时候就不会出错。

JSON.stringify(eval(`(${values.content})`))

  

  为了让JSON数据的展示更友好,就需要格式化数据,也就是要有空格。

JSON.stringify(JSON.parse(record.content), null, 2)

二、错误查看困难

  在测试环境或正式环境,如果定时任务处理的数据错误了,那么只能通过日志来排查。

  而一台跑着的服务器中会有很多其他的定时任务,在测试环境中,为了能看清楚日志,可以只运行一个任务。

  但是在正式环境中,是不能停止任务的,像目前运行的定时任务,可能几秒内就有几百行的日志,用肉眼观察有点累。

  好在我们这边接入了阿里云的日志服务,可以查看日志控制台,里面有丰富的查询过滤条件,可以准确的定位到某条日志。

  

  如果你有更好的调试方法,欢迎留言讨论。

三、应急处理

  在线上运行的时候,可能会因为这个那个的问题导致任务没有在指定时间运行。

  那么就得开放一个入口,来手动执行这个任务。

  一开始的想法是写个临时接口,然后用postman手动访问,不过这样的话对运营不太友好,毕竟运营会有人半夜值班盯着活动,但开发人员是不会半夜还盯着服务器的。

  于是又快速搭了个后台执行页面,有个下拉框可选择任务时间段,还有个运行按钮,到时候出问题的话,就手动运行一次。

  

最新文章

  1. 《转载》跟我学SpringMVC
  2. WPF在DLL中读取Resource的方法
  3. JS语法部分-数组
  4. 一个Option请求引发的深度解析
  5. QT运行时加载UI文件
  6. c++模板实例化的一个例子
  7. 通过例子学python(1)
  8. iOS面试题整理(一)
  9. 二、MLlib统计指标之关联/抽样/汇总
  10. 02-C语言执行过程
  11. 简单的方法来改善手机3G上网速度(2G转3G)
  12. 一种laravel特有的serviceProvider的加载方式
  13. 7.11 animals.c 程序
  14. LeetCode算法题-Reverse Vowels of a String(Java实现-四种解法)
  15. 各个版本spring的jar包以及源码下载地址,目前最高版本到spring4.3.8,留存备用:
  16. MFC通过button控制编辑框是否显示系统时间
  17. vue前端知识点整理
  18. C#编程(七十五)----------C#使用指针
  19. iOS11 Xcode 9 按住command 单击 恢复到从前(直接跳转到定义)
  20. Unity3d-Particle System 5.x系统的学习(四)

热门文章

  1. python办公入门7:xlwt
  2. java43
  3. Beta冲刺随笔——Day_Three
  4. 【2014广州市选day1】JZOJ2020年9月12日提高B组T4 字符串距离
  5. moviepy音视频剪辑:视频变换处理与内容相关的变换函数headblur、mask_and/or、mirror_x/y、rotate、painting、scroll介绍
  6. 第7.13节 案例详解:Python类变量
  7. 懒松鼠Flink-Boot(Flink+Spring):一款将Flink与Spring生态完美融合的脚手架工程
  8. REHの个人主页
  9. 题解 CF1062E Company
  10. 【HNOI2010】城市建设(对时间分治 & Kruskal)