在Linux上利用forever与init.d脚本实现Node.js开机自启
本文详细介绍如何在Linux系统(如Ubuntu Server)中,结合forever工具与/etc/init.d启动脚本,实现Node.js项目的开机自启动。内容涵盖forever的安装、基础测试、init.d脚本的编写规范、chkconfig命令的配置以及常见权限与依赖问题的解决方法,帮助开发者解决Node应用后台运行与自动重启的需求。
Node.js开机自启动配置方案概述
针对上述问题,是否可以通过forever配合启动脚本来解决?答案是肯定的,尽管过程略显繁琐,且forever官方文档中缺乏详细的配置说明。在配置过程中我也遇到了一些困难,以下将详细说明具体步骤。
注:本文实验环境为Ubuntu Server 12.04 LTS x86_64,在CentOS系统上的配置相对更为简单。
起初,我尝试在/etc/rc.local中添加一行forever start xxx命令,但发现Ubuntu(其他Linux发行版情况类似)并未执行该操作。主要矛盾在于,MongoDB可以使用这种方式运行,但forever管理的Node项目却无法启动。无奈之下,我决定从/etc/init.d目录入手进行配置。
forever安装与基础测试
首先需要确保forever已正确安装,操作非常简单,只需执行以下命令:
npm install forever -g
安装完成后,使用一个简单的Node程序进行测试:
forever start test.js
forever stop test.js
forever restart test.js
如果未出现error提示,说明forever运行正常。此时,使用forever在后台启动Node项目的基本条件已具备,接下来需要编写一个启动脚本。
init.d启动脚本编写与配置
脚本的基本内容如下,感谢原作者的贡献:
#!/bin/bash
### BEGIN INIT INFO
# Provides: xiyoulib
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# chkconfig: 345 88 08
# description: Forever for Node.js
DEAMON=/node.js/XiyouLibNodeExpress/bin/www #这里需要填写你自己的Node项目的启动脚本文件
LOG=/node.js/log/log #可选,日志文件目录
PID=/node.js/pid #必填内容,用于记录forever的进程号
export PATH=$PATH:/usr/local/bin #在这里指定一下Node的可执行程序安装目录,我的是/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules #这里是Node类库的路径
#往下的内容就不用修改了
node=node
forever=forever
case "$1" in
start)
$forever start -l $LOG --pidFile $PID -a $DEAMON
;;
stop)
$forever stop --pidFile $PID $DEAMON
;;
stopall)
$forever stopall --pidFile $PID
;;
restartall)
$forever restartall --pidFile $PID
;;
reload|restart)
$forever restart -l $LOG --pidFile $PID -a $DEAMON
;;
list)
$forever list
;;
*)
echo "Usage: /etc.init.d/node {start|stop|restart|reload|stopall|restartall|list}"
exit 1
;;
esac
在此提醒:建议为Node项目在根目录下单独建立一个目录(例如/node.js),并将权限设置为754,这样可以避免因权限问题导致的各种麻烦。
由于使用的是Ubuntu Server系统,且已配置了MongoDB的启动服务,其init.d脚本中包含了以下语句:
# Required-Start: $all
# Required-Stop: $all
因此,在后续添加自定义服务时,系统可能会提示错误。为此,我在Node项目的启动脚本中添加了前述的说明注释,以便Ubuntu Server系统正确识别。如果在CentOS上操作,通常不会出现此类问题,这一点需特别注意。
即以下所示的说明信息:
### BEGIN INIT INFO
# Provides: xiyoulib
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
服务注册与自启动验证
脚本编辑完成后,使用chkconfig --list指令检查新添加的服务是否生效。只有当运行级别3和5均显示为on时,才能实现开机自启动。
如果运行级别3和5未设置为on,请执行chkconfig --level 35 [你的服务名] on命令。Ubuntu Server可能会报出一些warning,但只要能将所需服务的3和5状态设为on,其他错误可以忽略(这似乎是系统自身的机制)。
设置完成后,Node项目即可在Linux上实现自启动。你可以执行shutdown -r now重启系统以验证是否成功自启。启动完成后,直接访问设定的端口号或虚拟目录,如果能看到预期结果,则配置成功。
如果未能成功启动,请仔细检查脚本内容,并根据报错信息进行相应修改。毕竟,这也是通过多次尝试得出的经验。
怎么在本地运行JavaScript脚本:Node.js下载安装与环境配置教程
2026-11-05 09:02:33
JavaScript开发环境怎么搭建:Node.js安装与VS Code配置指南
2026-11-03 23:36:59
JavaScript零基础入门:环境搭建与第一个Hello World
2026-11-03 23:34:09
NW.js 是什么:基于 Chromium 和 Node.js 的桌面应用框架
2026-11-03 15:14:00
nvm、n 和官方安装包:哪种 Node.js 升级方式更适合你
2026-11-03 14:54:28
