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+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
Nov 30 Javascript
JS 实现图片直接下载示例代码
Jul 22 Javascript
JQuery标签页效果的两个实例讲解(4)
Sep 17 Javascript
AngularJS中的Directive自定义一个表格
Jan 25 Javascript
JavaScript的设计模式经典之建造者模式
Feb 24 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
Dec 31 Javascript
[js高手之路]单例模式实现模态框的示例
Sep 01 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
May 15 Javascript
JavaScript 事件捕获冒泡与捕获详情
Nov 11 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模拟HTTP认证
2006/10/09 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
node.js的事件机制
2017/02/08 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
[13:39]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第一场
2014/05/26 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
Python contextlib模块使用示例
2015/02/18 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
几个常见的软件测试问题
2016/09/07 面试题
行政总监岗位职责
2013/12/05 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
计算机软件专业求职信
2014/06/10 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Python经常使用的一些内置函数
2022/04/11 Python