将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层都是前端开发工程师 ...
随机推荐
- beautifulsoup 获取a(tag)的属性href
一开始使用使用attrs(“href”) 出现错误TypeError: 'dict' object is not callable 由于attrs字典类型 atrrs["href" ...
- ReactNative入门(1)初识ReactJs
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- C语言对齐
"%-md":左对齐,若m比实际少时,按实际输出.(m为整数) "%md":右对齐,若m比实际少时,按实际输出. 我自己编了一个,给你看看实际效果: #incl ...
- UML类图中的关系和表示方法
类图是用来描述程序中的类以及它们之间的关系的,使用类图可以帮助我们简化对系统的理解.在UML类图中比较常见的关系有六种,它们分别是:依赖.关联.聚合.组合.泛化.实现,这六种关系中类之间的紧密程度是依 ...
- 纪中集训 Day 2
今天(其实是昨天= =)早上起来发现好冷好冷啊= = 吃完饭就准备比赛了,好吧B组难度的题总有一道不知到怎么写QAQ 太弱了啊!!! 蒟蒻没人权啊QAQ 今天第4题不会写,在这里说说吧 题目的意思就是 ...
- 2017-2-19 C#基础 基本数据类型的转换,转义字符,常量
1.基本数据类型的转换分两种:自动转换(隐式转换)和强制转换(显式转换).自动转换是从只类型转换到引用类型.强制转换是最长用的,是从引用类型转换到值类型或者从浮点型转换到整形.强制转换主要有三种形式: ...
- 读书笔记 effective c++ Item 23 宁可使用非成员非友元函数函数也不使用成员函数
1. 非成员非友元好还是成员函数好? 想象一个表示web浏览器的类.这样一个类提供了清除下载缓存,清除URL访问历史,从系统中移除所有cookies等接口: class WebBrowser { pu ...
- DAX/PowerBI系列 - 写在前面
今天讲的主角是: 不过,先上一个图--2017 Gartner商业智能和数据分析魔力象限 DAX关注这个玩意儿有好一段时间了,刚开始的时候(2014年?)是从Excel里面认识的.2014年当时公司用 ...
- c3p0获取连接Connection后的Close()---释疑
论题: java c3p0获取连接Connnection 之后, 调用 con.close( ) 是否真的关闭了物理连接 ? 简答: c3p0采用连接池, 目的就是提前预置一定数量的连接, 在使用时候 ...
- 本地计算机上的XXX服务启动后停止,某些服务在未由其它服务或程序使用时将自动停止
创建WindowsService,以及安装和卸载网上的资料一搜一大堆,在这里就不再做演示,只说明下博主在工作中使用WindowsService服务出现的错误,以及最终的结局方案. 1.启动window ...