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 相关文章推荐
Opacity.js
Jan 22 Javascript
javascript 子窗体父窗体相互传值方法
May 31 Javascript
jQuery中调用WebService方法小结
Mar 28 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
May 06 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
Jun 27 Javascript
jquery实现仿新浪微博评论滚动效果
Aug 06 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
JS限制条件补全问题实例分析
Dec 16 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 jQuery
浅谈如何使用webpack构建多页面应用
May 30 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
php 删除记录实现代码
2009/03/12 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
PHP中的session安全吗?
2016/01/22 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
python提取字典key列表的方法
2015/07/11 Python
Python中str.format()详解
2017/03/12 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
在python里面运用多继承方法详解
2019/07/01 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
Python多线程正确用法实例解析
2020/05/30 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
高中军训感言500字
2014/02/24 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2014年司法所工作总结
2014/11/22 职场文书
2015年信访工作总结
2015/04/07 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL