在Linux上利用forever与init.d脚本实现Node.js开机自启

作者:岩茶

时间:2026-10-28

浏览:392

本文详细介绍如何在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重启系统以验证是否成功自启。启动完成后,直接访问设定的端口号或虚拟目录,如果能看到预期结果,则配置成功。

如果未能成功启动,请仔细检查脚本内容,并根据报错信息进行相应修改。毕竟,这也是通过多次尝试得出的经验。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章