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 相关文章推荐
DWZ刷新dialog解决方法
Mar 03 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
Javascript中this绑定的3种方法与比较
Oct 13 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
浅谈angularJS的$watch失效问题的解决方案
Aug 11 Javascript
微信小程序实现tab和swiper切换结合效果
Jul 17 Javascript
vue中添加mp3音频文件的方法
Mar 02 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
May 21 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
Nov 05 Javascript
详解如何使用webpack打包多页jquery项目
Feb 01 jQuery
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
Sep 27 Javascript
JS实现九宫格拼图游戏
Jun 28 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
ThinkPHP之R方法实例详解
2014/06/20 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
php检查页面是否被百度收录
2015/10/28 PHP
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
jquery图片切换插件
2015/03/16 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
深入浅出学习python装饰器
2017/09/29 Python
学生信息管理系统python版
2018/10/17 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
大学学习个人的自我评价
2014/02/18 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
水电工程师岗位职责
2015/02/13 职场文书
世界遗产导游词
2015/02/13 职场文书
目标责任书格式范文
2015/05/11 职场文书