将node.js程序作为服务,并在windows下开机自动启动(使用forever)
手上项目中有一块服务是用node.js实现的,运行环境是windows server 2008 R2,刚开始着手实现这块功能的时候时间很紧迫,随便写了个console程序就部署上去了……启动方式就是在 CMD 里输入node main.js。
然而这样搞肯定是不行的啊!这样搞的话,万一有哪个 Error 没捕获到,整个服务就挂了,虽然咱写的代码很严谨,跑了一个多月也没挂,但为了万无一失,还是得有个自动重启的能力。
而且更关键的问题是……现在这样好low啊……开机后需要手动启动,而且运行的时候一直会显示一个 console ……这根本就忍不了啊!
目标:
支持崩溃后自动重启
支持后台运行
开机自动启动
自动重启和后台运行
因为 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……

没错,除非路径的第一个字符是 / ,否则就会被当成相对路径来处理。
坑爹啊(╯‵□′)╯︵┻━┻
或许是我用不惯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 的错误

注册服务不行……那就只好用计划任务了……
新建一个计划任务,然后系统启动时的触发器,由这个计划任务来执行我们的bat


嘛……这种方法最后是生效了,唯一需要注意的就是安全选项中,一定要选中 "不管用户是否登录都要运行" 的选项!!
否则会在系统启动触发器被触发的时候,因为没有用户登录,所以直接跳过了这个计划任务,进而无法启动我们的服务。

以上,虽然还有不完善的地方,但确实实现了预期的效果;
有任何更好的建议,或者疑问,欢迎评论~
最后说一句……windows服务器真TM麻烦……
将node.js程序作为服务,并在windows下开机自动启动(使用forever)的更多相关文章
- Qt Windows下开机自动启动自己的程序
源地址:http://blog.csdn.net/chrisfxs/article/details/13279491 版权声明:本文为博主原创文章,未经博主允许不得转载. void Widget::R ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
- 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure
[题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...
- 在Visual Studio上开发Node.js程序
[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...
- 使用events.EventEmitter 控制Node.js 程序执行流程
使用events.EventEmitter 控制Node.js 程序执行流程 标题写的可能也不太对,大家领会精神: Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. ...
- 使用 Node.js 搭建微服务网关
目录 Node.js 是什么 安装 node.js Node.js 入门 Node.js 应用场景 npm 镜像 使用 Node.js 搭建微服务网关 什么是微服务架构 使用 Node.js 实现反向 ...
- 在Visual Studio 2013 上开发Node.js程序
[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese
- 使用fetch调用node.js的Resuful服务
在目前的软件架构中,慢慢又有这样的趋势,就是在前端和业务接口层中间再加入一层,这是由于nodejs相对JAVA而言不适合做复杂的业务逻辑,如下图: 在这样的结构中,JS前端和web层都是前端开发工程师 ...
随机推荐
- MySQL性能优化方案
$stmt->execute(); // 绑定结果 $stmt->bind_result($username); // 移动游标 $stmt->fetch(); printf(&qu ...
- Android搜索框以及内容提供器
先看结果: 相关的官方文档在这里:Creating a Search Interface Android官方提供了两种方式: 弹出一个Dialog,覆盖当前的Activity界面 在AppBar中扩展 ...
- Android jni 编程2(对基本类型一维整型数组的操作)
参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组 ...
- (C#:Socket)简单的服务端与客户端通信。
要求:1.可以完成一对一的通信:2.实现服务端对客户端一对多的选择发送:3.可以实现服务端的群发功能:4.可以实现客户端文件的发送: 要点:服务器端:第一步:用指定的端口号和服务器的ip建立一个End ...
- Sql 知识点小结
使用数据库的好处: 1.安全 2.支持多用户操作 3.误删数据比较容易恢复 4.存储较大容量的数据MySql: MYsql AB公司开发的数据库, 现在归属Oracle公司,开元的关系型数据库RDBM ...
- shell监控网卡流量
#!/bin/bashRx=`ifconfig eno16777736 | grep RX | grep packets | awk '{print $5}'`Tx=`ifconfig eno1 ...
- css3瀑布流
css3虽然可以实现,不过要是真的运用到项目中还是老老实实写js吧 .container{ /*列的宽度*/ column-width:160px; -webkit-column-width:160p ...
- 【转载】简析TCP的三次握手与四次分手
最近在补习HTTP协议相关知识点,看到这篇讲得不错,所以转载收藏一下,同时也分享给大家.原文地址:http://www.jellythink.com/archives/705,版权归原作者所有. TC ...
- Eclipse中debug调试java代码一直报Source not found的解决办法
今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...
- Tree on the level UVa122
很单纯的树的遍历,但是输入和方向好麻烦!!下面给出代码,题目来自UVa 122 #include<cstdio> #include<cstring> #include<v ...