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 相关文章推荐
JavaScript表单常用验证集合
Jan 16 Javascript
Javascript 汉字字节判断
Aug 01 Javascript
JavaScript异步编程:异步数据收集的具体方法
Aug 19 Javascript
zTree插件之多选下拉菜单实例代码
Nov 06 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
Aug 11 Javascript
Sea.JS知识总结
May 05 Javascript
微信小程序  action-sheet详解及实例代码
Nov 09 Javascript
浅谈JavaScript的函数及作用域
Dec 30 Javascript
js 去掉字符串前后空格实现代码集合
Mar 25 Javascript
Vuejs实现带样式的单文件组件新方法
May 02 Javascript
利用JavaScript实现栈的数据结构示例代码
Aug 02 Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 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
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
Python开发编码规范
2006/09/08 Python
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
python3实现字符串操作的实例代码
2019/04/16 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
逻辑链路控制协议
2016/10/01 面试题
大学军训自我鉴定
2013/12/15 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
2014升学宴答谢词
2014/01/26 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
超市开店计划书
2014/04/26 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
工作表扬信范文
2015/01/17 职场文书
交警失职检讨书
2015/01/26 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
护理工作心得体会
2016/01/22 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
Android实现图片九宫格
2022/06/28 Java/Android