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 相关文章推荐
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
Oct 23 Javascript
JQuery validate插件验证用户注册信息
May 11 Javascript
jQuery表单对象属性过滤选择器实例详解
Sep 13 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
详解Node全局变量global模块
Sep 28 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
Aug 20 Javascript
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
js校验开始时间和结束时间
May 26 Javascript
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
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中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
php实现的双色球算法示例
2017/06/20 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
javascript实现滑动解锁功能
2014/12/31 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
Vue中props的使用详解
2018/06/15 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
python迭代器与生成器详解
2016/03/10 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
举例讲解Python常用模块
2019/03/08 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
python 生成器需注意的小问题
2020/09/29 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
干部四风问题整改措施思想汇报
2014/10/13 职场文书
违章停车检讨书
2014/10/21 职场文书
个人工作能力自我评价
2015/03/05 职场文书
导游词之吉林花园山
2019/10/17 职场文书