Nodejs中supervisor如何作为服务器端的一个服务存在?

Nodejs中supervisor如何作为服务器端的一个服务存在?

supervisor可以使改变过的Nodejs代码自动重启,但是有人知道如何把它固化下来吗?我现在的问题是,我确实可以使用supervisor app.js这条命令来保证代码自动重新编译, 但是每当我关闭控制栏的时候,supervisor也随之关闭了。我想知道有没有一种方法可以把它设置为类似pm2 start XX这样的服务器关了也会自动运行的。谢谢

8 回复

要在Node.js中将supervisor配置为像pm2一样作为服务器端的一个服务存在,并且即使关闭终端也能保持运行,可以通过使用系统级别的守护进程工具来实现。虽然supervisor本身不能直接配置为后台服务,但我们可以结合其他工具如pm2或系统的systemd服务来实现这一目标。

使用PM2

pm2是一个非常流行的Node.js应用管理工具,它支持后台运行、负载均衡、日志管理和自动重启等功能。以下是使用pm2将你的应用作为服务运行的步骤:

  1. 安装PM2

    npm install -g pm2
    
  2. 启动应用并设置为服务

    pm2 start app.js --name "my-app"
    

    这会启动你的应用,并将其命名为my-app

  3. 保存当前的进程列表到PM2的生态文件

    pm2 save
    
  4. 让PM2开机自启

    pm2 startup
    

    执行上述命令后,PM2会输出一些需要执行的命令,通常是类似于sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u <username>的命令。复制并粘贴该命令到终端,然后按提示操作。

  5. 确保PM2服务在重启时自动启动

    pm2 startup
    

现在,你的应用将以服务的形式运行,即使你关闭终端,它也会继续运行。

使用Systemd

如果你更喜欢使用系统自带的服务管理工具(例如systemd),你可以创建一个.service文件来定义你的Node.js应用服务。

  1. 创建一个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
    
  2. 启用并启动服务

    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 啊

在操作系统下,一切皆是脚本

5楼正解

用 nohup 啊

要让supervisor在服务器上以服务的形式存在,并能够在系统重启后自动启动,你可以将其配置为一个systemd服务。这样,无论何时系统重启,该服务都会自动启动。

以下是具体步骤:

  1. 创建一个systemd服务文件: 在Linux系统上,你需要创建一个service文件。通常这些文件位于/etc/systemd/system/目录下。假设你的Node.js应用名为app.js,则创建一个名为node-app.service的文件:

    sudo nano /etc/systemd/system/node-app.service
    
  2. 编辑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应用的工作目录。
  3. 创建并配置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
    
  4. 启动并启用服务: 保存所有更改后,使用systemctl命令启用并启动服务:

    sudo systemctl enable node-app
    sudo systemctl start node-app
    
  5. 检查服务状态: 使用以下命令检查服务是否正在运行:

    sudo systemctl status node-app
    

这样配置后,supervisor将以服务的形式运行在服务器上,并且可以在系统重启后自动启动。

回到顶部