Nodejs中supervisor如何作为服务器端的一个服务存在?
Nodejs中supervisor如何作为服务器端的一个服务存在?
supervisor可以使改变过的Nodejs代码自动重启,但是有人知道如何把它固化下来吗?我现在的问题是,我确实可以使用supervisor app.js这条命令来保证代码自动重新编译, 但是每当我关闭控制栏的时候,supervisor也随之关闭了。我想知道有没有一种方法可以把它设置为类似pm2 start XX这样的服务器关了也会自动运行的。谢谢
要在Node.js中将supervisor
配置为像pm2
一样作为服务器端的一个服务存在,并且即使关闭终端也能保持运行,可以通过使用系统级别的守护进程工具来实现。虽然supervisor
本身不能直接配置为后台服务,但我们可以结合其他工具如pm2
或系统的systemd
服务来实现这一目标。
使用PM2
pm2
是一个非常流行的Node.js应用管理工具,它支持后台运行、负载均衡、日志管理和自动重启等功能。以下是使用pm2
将你的应用作为服务运行的步骤:
-
安装PM2:
npm install -g pm2
-
启动应用并设置为服务:
pm2 start app.js --name "my-app"
这会启动你的应用,并将其命名为
my-app
。 -
保存当前的进程列表到PM2的生态文件:
pm2 save
-
让PM2开机自启:
pm2 startup
执行上述命令后,PM2会输出一些需要执行的命令,通常是类似于
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u <username>
的命令。复制并粘贴该命令到终端,然后按提示操作。 -
确保PM2服务在重启时自动启动:
pm2 startup
现在,你的应用将以服务的形式运行,即使你关闭终端,它也会继续运行。
使用Systemd
如果你更喜欢使用系统自带的服务管理工具(例如systemd
),你可以创建一个.service
文件来定义你的Node.js应用服务。
-
创建一个Systemd服务文件: 在
/etc/systemd/system/
目录下创建一个名为nodeapp.service
的文件,并添加以下内容:[Unit] Description=Node.js App After=network.target [Service] User=<your-username> ExecStart=/usr/local/bin/node /path/to/your/app.js Restart=always [Install] WantedBy=multi-user.target
-
启用并启动服务:
sudo systemctl enable nodeapp.service sudo systemctl start nodeapp.service
通过这种方式,你的Node.js应用将作为一个系统服务运行,即使关闭终端也会持续运行。
以上两种方法都可以实现将supervisor
的效果持久化到服务器端的服务中。希望这对你有所帮助!
楼主的术语有点问题… supervisor 至少有两个… 虽然按照楼主说的应该是第一个… https://github.com/isaacs/node-supervisor http://supervisord.org/ 另外 screen 的意思是有个命令行工具叫做 screen, 简单说是终端里启动一个叫做 screen 的终端 https://wiki.archlinux.org/index.php/GNU_Screen
用 nohup 啊
在操作系统下,一切皆是脚本
tmux
试试 forever https://github.com/nodejitsu/forever
5楼正解
用 nohup 啊
要让supervisor
在服务器上以服务的形式存在,并能够在系统重启后自动启动,你可以将其配置为一个systemd服务。这样,无论何时系统重启,该服务都会自动启动。
以下是具体步骤:
-
创建一个systemd服务文件: 在Linux系统上,你需要创建一个service文件。通常这些文件位于
/etc/systemd/system/
目录下。假设你的Node.js应用名为app.js
,则创建一个名为node-app.service
的文件:sudo nano /etc/systemd/system/node-app.service
-
编辑service文件: 在文件中添加以下内容(根据你的实际路径调整):
[Unit] Description=Node.js App [Service] ExecStart=/usr/local/bin/supervisord -c /path/to/supervisord.conf Restart=always User=nobody Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/path/to/your/app [Install] WantedBy=multi-user.target
注意:
ExecStart
指向supervisor的可执行文件及配置文件。Restart=always
确保服务在任何情况下都能重启。User=nobody
指定运行服务的用户(可以根据实际情况更改)。WorkingDirectory
是你的Node.js应用的工作目录。
-
创建并配置supervisord.conf: 创建并编辑
supervisord.conf
文件,确保它包含你的Node.js应用的配置信息:sudo nano /path/to/supervisord.conf
配置文件可能包括如下内容:
[program:myapp] command=node /path/to/app.js directory=/path/to/your/app autostart=true autorestart=true stderr_logfile=/var/log/myapp.err.log stdout_logfile=/var/log/myapp.out.log
-
启动并启用服务: 保存所有更改后,使用systemctl命令启用并启动服务:
sudo systemctl enable node-app sudo systemctl start node-app
-
检查服务状态: 使用以下命令检查服务是否正在运行:
sudo systemctl status node-app
这样配置后,supervisor
将以服务的形式运行在服务器上,并且可以在系统重启后自动启动。