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
相关产品推荐
相关产品推荐

