🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
  最近做一个活动,需要用到定时任务,于是使用了 [node-schedule](https://github.com/node-schedule/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)中,可随时读写。 :-: ![](https://img.kancloud.cn/16/ee/16eef2a4c2cf5a5bd8b9818baee077aa_1898x368.png =800x) 图 11   通用配置还有一个比较常见的场景,那就是测试的时候,在线修改可配置的参数。例如有个活动,里面有个任务是观看直播30分钟,而测试的时候不可能等到30分钟后,查看效果。在测试的时候可以调整成2分钟,如果这些参数写死在代码中,那么就需要重发代码,而保存在通用配置中的话,就不用重发代码了。   下图是个增和改的弹框,在新增的时候需要格式化多行文本中的JSON数据,先用 eval(),再用JSON.stringify(),这样的话在调用JSON.parse()的时候就不会出错。 ~~~ JSON.stringify(eval(`(${values.content})`)) ~~~ :-: ![](https://img.kancloud.cn/b3/3d/b33d720fb26483aa5f2bd4a4eb20f34b_1610x1302.png =400x) 图 12   为了让JSON数据的展示更友好,就需要格式化数据,也就是要有空格。 ~~~ JSON.stringify(JSON.parse(record.content), null, 2) ~~~ ## 二、错误查看困难   在测试环境或正式环境,如果定时任务处理的数据错误了,那么只能通过日志来排查。   而一台跑着的服务器中会有很多其他的定时任务,在测试环境中,为了能看清楚日志,可以只运行一个任务。   但是在正式环境中,是不能停止任务的,像目前运行的定时任务,可能几秒内就有几百行的日志,用肉眼观察有点累。   好在我们这边接入了阿里云的日志服务,可以查看日志控制台,里面有丰富的查询过滤条件,可以准确的定位到某条日志。 :-: ![](https://img.kancloud.cn/7d/5a/7d5a8d231a45d78aa795b7534bdb7ed0_2384x854.png =800x) 图 13 ## 三、应急处理   在线上运行的时候,可能会因为这个那个的问题导致任务没有在指定时间运行。   那么就得开放一个入口,来手动执行这个任务。   一开始的想法是写个临时接口,然后用postman手动访问,不过这样的话对运营不太友好,毕竟运营会有人半夜值班盯着活动,但开发人员是不会半夜还盯着服务器的。   于是又快速搭了个后台执行页面,有个下拉框可选择任务时间段,还有个运行按钮,到时候出问题的话,就手动运行一次。 :-: ![](https://img.kancloud.cn/89/52/8952c0bf722b93a28555f82a923fe59b_840x314.png =400x) 图 14 ***** > 原文出处: [博客园-Node.js躬行记](https://www.cnblogs.com/strick/category/1688575.html) [知乎专栏-Node.js躬行记](https://zhuanlan.zhihu.com/pwnode) 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://box.kancloud.cn/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200) 推荐一款前端监控脚本:[shin-monitor](https://github.com/pwstrick/shin-monitor),不仅能监控前端的错误、通信、打印等行为,还能计算各类性能参数,包括 FMP、LCP、FP 等。