node.js程序作为服务并在windows下开机自启动(用forever)


Posted in Javascript onMarch 29, 2017

前言

最近项目中有一块服务是用node.js实现的,运行环境是windows server 2008 R2,刚开始着手实现这块功能的时候时间很紧迫,随便写了个console程序就部署上去了……启动方式就是在 CMD 里输入node main.js。

然而这样搞肯定是不行的啊!这样搞的话,万一有哪个 Error 没捕获到,整个服务就挂了,虽然咱写的代码很严谨,跑了一个多月也没挂,但为了万无一失,还是得有个自动重启的能力。

而且更关键的问题是……现在这样好low啊……开机后需要手动启动,而且运行的时候一直会显示一个 console ……这根本就忍不了啊!

目标:

  1.  支持崩溃后自动重启
  2.  支持后台运行
  3.  开机自动启动

自动重启和后台运行

因为 javascript 的单线程运行方式,一点错误就彻底崩溃的特性,自动重启的解决方案自然也早就有了,比如 pm2 和 forever ,从功能上看,pm2 比 forever 要强大不少,然而我只想要个 "Keep Alive" ,所以我选择了 forever.

先全局安装 forever

npm install -g forever

然后把启动用的bat脚本修改一下……

旧的启动脚本:

node d:\xxx\main.js

使用 forever 后的:

forever start -o out.log -e err.log d:\xxx\main.js

如果不出问题的话,应该就可以了~

然而每次你这样想的时候,就该出问题了_(:з)∠)_

forever 这家伙居然不认 windows 下的绝对路径…… 假如我是在c:\Users\Administrator下执行的命令,那么 forever 就会尝试去 c:\Users\Administrator\d:\xxx\下面寻找main.js……

node.js程序作为服务并在windows下开机自启动(用forever)

没错,除非路径的第一个字符是 / ,否则就会被当成相对路径来处理。

坑爹啊。

或许是我用不惯windows的缘故,反正我是没找到好的解决办法,最终迫于无奈,在bat脚本中手动切换了一下盘符处理了

最后的脚本:

@echo off
d:
forever start -o xxx/logs/out.log -e xxx/logs/err.log --uid "communityWorker" xxx/main.js

其实我总是感觉这种做法不太对,但对 windows 实在不熟悉,如果谁有更好的办法也请评论告诉我

开机自动启动

既然是自动启动嘛,我首先想到的就是注册一个自启动的服务,然而注册的似乎只能是一个exe,用bat注册服务会报出一个 1053 的错误

node.js程序作为服务并在windows下开机自启动(用forever)

注册服务不行……那就只好用计划任务了……

新建一个计划任务,然后系统启动时的触发器,由这个计划任务来执行我们的bat

node.js程序作为服务并在windows下开机自启动(用forever)

node.js程序作为服务并在windows下开机自启动(用forever)

嘛……这种方法最后是生效了,唯一需要注意的就是安全选项中,一定要选中 "不管用户是否登录都要运行" 的选项!!

否则会在系统启动触发器被触发的时候,因为没有用户登录,所以直接跳过了这个计划任务,进而无法启动我们的服务。

node.js程序作为服务并在windows下开机自启动(用forever)

虽然还有不完善的地方,但确实实现了预期的效果;最后说一句……windows服务器真TM麻烦……

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
Jun 23 Javascript
浅谈javascript对象模型和function对象
Dec 26 Javascript
avalon js实现仿微博拖动图片排序
Aug 14 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
Nov 09 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
Dec 15 Javascript
关于javascript的一些知识以及循环详解
Sep 12 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
Feb 05 Javascript
请求时token过期自动刷新token操作
Sep 11 Javascript
jQuery实现字体颜色渐变效果的方法
Mar 29 #jQuery
整理关于Bootstrap导航的慕课笔记
Mar 29 #Javascript
javascript 中Cookie读、写与删除操作
Mar 29 #Javascript
移动端利用H5实现压缩图片上传功能
Mar 29 #Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
Mar 29 #Javascript
Vue.js展示AJAX数据简单示例讲解
Mar 29 #Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
Mar 29 #Javascript
You might like
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python将字符串转换成json的方法小结
2019/07/09 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
保密承诺书范文
2014/03/27 职场文书
社区创先争优承诺书
2014/08/30 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
放假通知格式
2015/04/14 职场文书
工作服管理制度范本
2015/08/06 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript
vue实现列表垂直无缝滚动
2022/04/08 Vue.js
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js