怎么做一个定时消息提醒_如何用Nodejs编写一个定时消息提醒应用?
背景:
同事告诉我最近一段时间每天上班长时间盯着屏幕工作经常眼睛疼,问我有没有好用定时提醒功能。我受到启发,决定用nodejs来实现一个定时提醒应用。
需求分析:
同事是个程序员,熟悉命令行操作,这样我就可以忽略用户界面了。只要着重实现几个个核心功能点就行。例如:创建消息提醒计划,管理计划等。拆解一下需求,实现这些功能点我会用到【消息提醒】【定时计划】【常驻系统后台】【封装成 node package】。分析的差不多了,接下来就可以准备着手细化实现方案了。
关于消息提醒:
node-notifier 是一个node package,支持发送跨平台【macOS , win, Linux】的native notifications。示例代码:
const notifier = require('node-notifier');// Stringnotifier.notify('Message'); Objectnotifier.notify({ title: 'My notification', message: 'Hello, there!'});
macOS演示效果:
关于定时计划
node-schedule 是一个处理任务调度的package,可以让任务按照指定的时间周期计划来执行。指定时间周期的方式和cron类似。如下为周期指定的方法:
* * * * * *┬ ┬ ┬ ┬ ┬ ┬│ │ │ │ │ ││ │ │ │ │ └ 周几(0 - 7)(0 或 7 是周日)│ │ │ │ └───── 月(1 - 12)│ │ │ └────────── 日(1 - 31)│ │ └─────────────── 小时(0 - 23)│ └──────────────────── 分钟(0 - 59)└───────────────────────── 秒(0 - 59, 可选)
node-schedule代码示例:
const schedule = require('node-schedule');schedule.scheduleJob('0 0 9-18 * * 1-5', function () {//周一到周五9-18点每小时0分0秒执行任务})
关于常驻系统后台:
想要让程序一直监听schedule,就要在系统中开启一个常驻的nodejs进程。利用nodejs自带的child_process 模块创建node子进程。其他的守护进程包也都是通过child_process来实现的例如:foreverjs,PM2等。
示例代码up.js:
const { spawn } = require('child_process');const path = require('path');const { exit } = require('process');// 开启node子进程let child = spawn('node', [path.join(__dirname, 'task.js'), options.rule])// 退出父进程exit();
开启进程之后可以在活动监视器查看到,如图所示:
接下来要完成命令交互部分,命令行交互用到是的commanderjs这个package。使用它我们可以快速实现命令交互的功能。代码示例 up:
#!/usr/bin/env nodeconst { exec, spawn } = require('child_process');const { exit } = require('process');const program = require('commander');var fs = require('fs');const kill = require('tree-kill');const path = require('path');const log_file = path.join(__dirname, 'log.txt')const stop = program.command('stop');stop.action(() => { let pids = fs.readFileSync(log_file).toString().trim() if (pids.length != 0) { pids.split('').forEach(function (pid) { if (pid.length > 0) { kill(pid) fs.writeFile(log_file, '', function () { }) } }) console.log('⏰提醒已经关闭') } else { console.log("⚠️没有发现任何计划") }})const start = program.command('start')start.requiredOption('-r, --rule ', '填写一个消息提醒规则例如:*/30 * * * * *') .action(function (options) { try { let child = spawn('node', [path.join(__dirname, 'task.js'), options.rule]) fs.open(log_file, 'a+', function (err, fd) { fs.write(fd, child.pid + "", function () { }); exit(); }); console.log(`✅任务创建成功,执行频率${options.rule}`); } catch (e) { console.error('spawn ERROR !!'); console.error(e); } })program.parse(process.argv);
到此位置功能已经基本实现了,我已经把package发布到了npm和Github(目前支持macOS,其他平台还没有测试)。
安装:
npm i standup-workday -g
开启消息定时提醒命令:
up start -r "*/10 * * * * *"
关闭:
up stop
视频演示地址:https://www.ixigua.com/6864153350209241607/
欢迎试用,提出宝贵意见,如果对你有帮助请帮忙转发此文章~
怎么做一个定时消息提醒_如何用Nodejs编写一个定时消息提醒应用?相关推荐
- node.js 没有转发_如何用Nodejs编写一个定时消息提醒应用?
背景: 同事告诉我最近一段时间每天上班长时间盯着屏幕工作经常眼睛疼,问我有没有好用定时提醒功能.我受到启发,决定用nodejs来实现一个定时提醒应用. 需求分析: 同事是个程序员,熟悉命令行操作,这样 ...
- 用java编写一个故事的程序_使用Java怎么编写一个递归程序
使用Java怎么编写一个递归程序 发布时间:2021-02-20 16:05:44 来源:亿速云 阅读:52 作者:Leah 这篇文章将为大家详细讲解有关使用Java怎么编写一个递归程序,文章内容质量 ...
- 利用python写时钟程序_如何用python编写一个番茄钟程序
今天,我们尝试用python来编写一个简单的PC端番茄钟,需要实现的功能如下:启动时"滴"一声并询问:"休息时间结束!是否开始一个新的番茄钟?" 如果用户点击& ...
- 用java编写一个简易功能画板_用Java语言编写一个简易画板
讲了三篇概博客的概念,今天,我们来一点实际的东西.我们来探讨一下如何用Java语言,编写一块简易的画图板. 一.需求分析 无论我们使用什么语言,去编写一个什么样的项目,我们的第一步,总是去分析这个项目 ...
- python能写什么脚本_如何用python编写一个阴阳师脚本(自动刷御魂,业原火)(2)...
在上一篇文章里,我们已经安装好了python,安装好了所有需要的库,现在可以开始码代码了嗷 先让我们来分析一下需要实现的脚本功能,首先就是这个开始战斗此时队友还没来... 当队友(舍友)进来时,开始战 ...
- 关于点名的简单python编程_如何用python编写一个简易的随机点名软件
匿名用户 1级 2018-05-30 回答 思路:1.定义一个字典,把名字和数字对应起来:2.引用随机模块:3.输入要点名的个数,通过循环输出名字. 具体代码如下: # -*- coding:utf- ...
- python编程代码画画_如何用python编写一个绘制马赛克图像的自写程序
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 这篇教程将会展示如何用python的图形化包"Pygame"和基础的文件I/O来创建一 ...
- java 设计连连看_如何用JAVA 编写一个连连看游戏全程设计
展开全部 刚试了..测试通过.. importjavax.swing.*; importjava.awt.*; importjava.awt.event.*; publicclass LianLian ...
- java怎么实现日程提醒_如何用java和xml实现日程提醒
[[[xml中不是写db连接,而是db连接的信息. 连接还是要在java代码里头实现的]]]] 你是不是没有用到框架,比如struts,spring.. 而是直接的jsp servlet? xml文件 ...
最新文章
- apache 查看本地页面_GeoSever的页面实现
- java线程的cancel_多线程-Cancel详解
- c语言第一章考试题及答案,C语言考试题库及答案整理版.doc
- 高中毕业 84 岁奶奶自学编程受邀参加 WWDC,人生从来没有太晚!
- Shell中各种括号的作用:()、(())、[]、[[]]、{}、>、>>、$()、${}
- 试读《JavaScript语言精粹(修订版)》
- 【黑金视频连载】NIOS II视频教程正式连载了!!!!!!!!
- 码农谷 找出N之内的所有完数
- Web开发之Servlet
- 抽样:理论与应用(第二版) 金勇进 课程笔记 1~4章
- 自己搭建虚拟服务器,如何自己搭建虚拟主机
- SOPC Builder failed to refresh PTF file
- CDGA|数据虚拟化助力数据治理成效显著
- 阿里成立达摩院,三年投入超千亿
- acp 适应性领导_什么是适应性领导?
- 全面的关于OLAP数仓总结
- 企业安全风险的来源有哪些?
- 【基于ECharts 数据可视化展示相关配置表全】
- 【Excel 2013 数据透视表 学习】一、创建数据透视表
- 金融产品的不可能三角:收益性、风险性、流动性