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对象与JSON格式数据相互转换
Feb 20 Javascript
setInterval,setTimeout与jquery混用的问题
Apr 08 Javascript
Jquery中"$(document).ready(function(){ })"函数的使用详解
Dec 30 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
Angular之toDoList的实现代码示例
Dec 02 Javascript
原生js实现省市区三级联动代码分享
Feb 12 Javascript
记一次webapck4 配置文件无效的解决历程
Sep 19 Javascript
如何优雅地在vue中添加权限控制示例详解
Mar 07 Javascript
浅谈React Native 传参的几种方式(小结)
May 21 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
Apr 03 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操作XML作为数据库的类
2010/12/19 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
关于js遍历表格的实例
2013/07/10 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
2014/06/06 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
利用Python如何生成随机密码
2016/04/20 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
2019/04/29 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
质量工程师岗位职责
2013/11/16 职场文书
采购文员岗位职责
2013/11/20 职场文书
三年级科学教学反思
2014/01/29 职场文书
数学检讨书1000字
2014/02/24 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
Python 流媒体播放器的实现(基于VLC)
2021/04/28 Python
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
关于@OnetoMany关系映射的排序问题,使用注解@OrderBy
2021/12/06 Java/Android