You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeBSD下实现NodeJS应用常驻运行(崩溃自动重启)

在FreeBSD上实现NodeJS应用自动启动与崩溃重启

使用daemon工具的实现方式

FreeBSD自带的daemon工具的-r参数确实支持进程崩溃后自动重启,正确的调用方式如下:

直接启动并开启重启

用以下命令启动你的NodeJS应用,同时开启自动重启和日志记录:

daemon -r -o /var/log/your-app.log -e /var/log/your-app-error.log /usr/local/bin/node /path/to/your/app.js

参数解释:

  • -r:核心参数,开启进程终止后的自动重启功能
  • -o:指定标准输出日志路径,方便排查问题
  • -e:指定错误输出日志路径
  • -f(可选):若需要在前台运行调试,可添加该参数;后台运行则去掉

设置开机自动启动

将上述命令添加到/etc/rc.local中,实现开机自启:

echo 'daemon -r -o /var/log/your-app.log -e /var/log/your-app-error.log /usr/local/bin/node /path/to/your/app.js' >> /etc/rc.local
chmod +x /etc/rc.local  # 确保rc.local有执行权限

替代方案(生产环境更推荐)

如果daemon的功能不足以满足需求,以下几种方案更适合生产环境:

1. FreeBSD原生rc.d脚本(官方推荐)

这是FreeBSD最稳定的服务管理方式,系统原生支持,无需额外安装工具。

  • 创建rc脚本文件/usr/local/etc/rc.d/your_app,内容如下:
#!/bin/sh
# PROVIDE: your_app
# REQUIRE: networking
# KEYWORD: shutdown

. /etc/rc.subr

name="your_app"
rcvar="${name}_enable"
command="/usr/local/bin/node"
command_args="/path/to/your/app.js"
pidfile="/var/run/${name}.pid"
command_interpreter="/usr/local/bin/node"
start_precmd="your_app_precmd"

your_app_precmd() {
    # 创建日志目录并设置权限
    mkdir -p /var/log/${name}
    chown nobody:nobody /var/log/${name}
}

load_rc_config $name
run_rc_command "$1"
  • 配置权限并启用服务:
chmod +x /usr/local/etc/rc.d/your_app
sysrc your_app_enable="YES"
service your_app start

之后可以通过service your_app start/stop/restart/status来管理应用,系统会自动监控进程状态,异常终止时自动重启。

2. pm2(NodeJS专属进程管理器)

pm2是NodeJS生态中广泛使用的工具,功能丰富,支持日志管理、负载均衡等。

  • 安装pm2:
npm install -g pm2
  • 启动应用并配置开机自启:
pm2 start /path/to/your/app.js --name your-app
pm2 startup freebsd -u your-username  # 生成开机启动脚本
pm2 save  # 保存当前进程状态
  • 常用管理命令:
    • 查看应用状态:pm2 status
    • 重启应用:pm2 restart your-app
    • 查看实时日志:pm2 logs your-app

3. supervisor(通用进程监控工具)

supervisor是跨语言的进程管理器,适合监控各类后台进程。

  • 安装supervisor:
pkg install supervisor
  • 编辑配置文件/usr/local/etc/supervisord.conf,添加以下内容:
[program:your-app]
command=/usr/local/bin/node /path/to/your/app.js
directory=/path/to/your/app-working-dir
user=nobody  # 以低权限用户运行,提升安全性
autostart=true
autorestart=true  # 异常终止时自动重启
stdout_logfile=/var/log/your-app.log
stderr_logfile=/var/log/your-app-error.log
  • 启用并启动supervisor:
sysrc supervisord_enable="YES"
service supervisord start
  • 常用管理命令:
    • 查看应用状态:supervisorctl status
    • 重启应用:supervisorctl restart your-app

内容的提问来源于stack exchange,提问作者Bo Thompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:27:18