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 相关文章推荐
js加解密 脚本解密
Feb 22 Javascript
Javascript图像处理—亮度对比度应用案例
Jan 03 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
May 26 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
Aug 19 Javascript
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
前端把html表格生成为excel表格的实例
Sep 19 Javascript
灵活使用console让js调试更简单的方法步骤
Apr 23 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
Aug 11 Javascript
React倒计时功能实现代码——解耦通用
Sep 18 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
Feb 25 Javascript
(开源)微信小程序+mqtt,esp8266温湿度读取
Apr 02 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错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
基于JavaScript实现一个简单的Vue
2018/09/26 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
电子商务个人职业生涯规划范文
2014/02/12 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
校长寄语大全
2014/04/09 职场文书
董事长助理工作职责
2014/06/08 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
民主生活会汇报材料
2014/12/15 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
2019广播稿怎么写
2019/04/17 职场文书
Python中的socket网络模块介绍
2022/07/23 Python