当进程停止时,使用PM2运行的节点应用不会停止

时间:2019-10-13 14:21:37

标签: node.js pm2

我注意到,即使停止或删除了进程,以PM2启动的应用仍将继续运行。这并非总是会发生,特别是如果该过程刚刚开始,但是如果让它运行一段时间,它将始终发生。

我的开始过程是:

pm2 start npm --name "next" -- start

这按预期工作。

但是,如果我过几天再回到它并运行:

pm2 stop next

该过程将停止,并从pm2 ls的输出中消失。 不幸的是,应用程序本身仍在后台运行,而我发现停止该应用程序的唯一方法是完全重启服务器,这不是最佳选择。

我的问题类似于提到的here,但是解决方案对我不起作用。

ps aux || grep node的输出:

ps aux || grep "node"
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.5 225444  5868 ?        Ss   Sep09   1:42 /lib/systemd/systemd --system --deserialize 38
root         2  0.0  0.0      0     0 ?        S    Sep09   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<   Sep09   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        I<   Sep09   0:00 [mm_percpu_wq]
root         7  0.0  0.0      0     0 ?        S    Sep09   0:33 [ksoftirqd/0]
root         8  0.0  0.0      0     0 ?        I    Sep09   2:47 [rcu_sched]
root         9  0.0  0.0      0     0 ?        I    Sep09   0:00 [rcu_bh]
root        10  0.0  0.0      0     0 ?        S    Sep09   0:00 [migration/0]
root        11  0.0  0.0      0     0 ?        S    Sep09   0:10 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S    Sep09   0:00 [cpuhp/0]
root        13  0.0  0.0      0     0 ?        S    Sep09   0:00 [kdevtmpfs]
root        14  0.0  0.0      0     0 ?        I<   Sep09   0:00 [netns]
root        15  0.0  0.0      0     0 ?        S    Sep09   0:00 [rcu_tasks_kthre]
root        16  0.0  0.0      0     0 ?        S    Sep09   0:00 [kauditd]
root        17  0.0  0.0      0     0 ?        S    Sep09   0:01 [khungtaskd]
root        18  0.0  0.0      0     0 ?        S    Sep09   0:00 [oom_reaper]
root        19  0.0  0.0      0     0 ?        I<   Sep09   0:00 [writeback]
root        20  0.0  0.0      0     0 ?        S    Sep09   0:00 [kcompactd0]
root        21  0.0  0.0      0     0 ?        SN   Sep09   0:00 [ksmd]
root        22  0.0  0.0      0     0 ?        SN   Sep09   0:00 [khugepaged]
root        23  0.0  0.0      0     0 ?        I<   Sep09   0:00 [crypto]
root        24  0.0  0.0      0     0 ?        I<   Sep09   0:00 [kintegrityd]
root        25  0.0  0.0      0     0 ?        I<   Sep09   0:00 [kblockd]
root        26  0.0  0.0      0     0 ?        I<   Sep09   0:00 [ata_sff]
root        27  0.0  0.0      0     0 ?        I<   Sep09   0:00 [md]
root        28  0.0  0.0      0     0 ?        I<   Sep09   0:00 [edac-poller]
root        29  0.0  0.0      0     0 ?        I<   Sep09   0:00 [devfreq_wq]
root        30  0.0  0.0      0     0 ?        I<   Sep09   0:00 [watchdogd]
root        34  0.0  0.0      0     0 ?        S    Sep09  21:32 [kswapd0]
root        35  0.0  0.0      0     0 ?        I<   Sep09   0:00 [kworker/u3:0]
root        36  0.0  0.0      0     0 ?        S    Sep09   0:00 [ecryptfs-kthrea]
root        78  0.0  0.0      0     0 ?        I<   Sep09   0:00 [kthrotld]
root        79  0.0  0.0      0     0 ?        I<   Sep09   0:00 [acpi_thermal_pm]
root        80  0.0  0.0      0     0 ?        S    Sep09   0:00 [scsi_eh_0]
root        81  0.0  0.0      0     0 ?        I<   Sep09   0:00 [scsi_tmf_0]
root        82  0.0  0.0      0     0 ?        S    Sep09   0:00 [scsi_eh_1]
root        83  0.0  0.0      0     0 ?        I<   Sep09   0:00 [scsi_tmf_1]
root        89  0.0  0.0      0     0 ?        I<   Sep09   0:00 [ipv6_addrconf]
root        98  0.0  0.0      0     0 ?        I<   Sep09   0:00 [kstrp]
root       115  0.0  0.0      0     0 ?        I<   Sep09   0:00 [charger_manager]
root       153  0.0  0.0      0     0 ?        S    Sep09   0:00 [scsi_eh_2]
root       154  0.0  0.0      0     0 ?        I<   Sep09   0:00 [scsi_tmf_2]
root       155  0.0  0.0      0     0 ?        I<   Sep09   0:58 [kworker/0:1H]
root       266  0.0  0.0      0     0 ?        I<   Sep09   0:00 [raid5wq]
root       318  0.0  0.0      0     0 ?        S    Sep09   0:54 [jbd2/vda1-8]
root       319  0.0  0.0      0     0 ?        I<   Sep09   0:00 [ext4-rsv-conver]
root       404  0.0  0.0      0     0 ?        I<   Sep09   0:00 [iscsi_eh]
root       408  0.0  0.0 105904   228 ?        Ss   Sep09   0:00 /sbin/lvmetad -f
root       413  0.0  0.0      0     0 ?        I<   Sep09   0:00 [ib-comp-wq]
root       414  0.0  0.0      0     0 ?        I<   Sep09   0:00 [ib_mcast]
root       415  0.0  0.0      0     0 ?        I<   Sep09   0:00 [ib_nl_sa_wq]
root       417  0.0  0.0      0     0 ?        I<   Sep09   0:00 [rdma_cm]
root       698  0.0  0.9 501844  9800 ?        Ss   Sep18   1:46 /usr/sbin/apache2 -k start
root       842  0.0  0.1 652392  1420 ?        Ssl  Sep09   0:18 /usr/bin/lxcfs /var/lib/lxcfs/
root       843  0.0  0.4  71488  4416 ?        Ss   Sep09   0:05 /lib/systemd/systemd-logind
root       848  0.0  0.7 187700  7924 ?        Ssl  Sep09   0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root       854  0.0  0.1 287992  1416 ?        Ssl  Sep09   2:48 /usr/lib/accountsservice/accounts-daemon
root       856  0.0  0.1  31748  1240 ?        Ss   Sep09   0:07 /usr/sbin/cron -f
syslog     861  0.0  0.1 263036  1776 ?        Ssl  Sep09   1:51 /usr/sbin/rsyslogd -n
root       864  0.0  0.7 170876  7808 ?        Ssl  Sep09   0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
message+   865  0.0  0.3  50280  3092 ?        Ss   Sep09   2:10 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
daemon     891  0.0  0.0  28332   212 ?        Ss   Sep09   0:00 /usr/sbin/atd -f
root       895  0.0  0.2  72296  2068 ?        Ss   Sep09   2:17 /usr/sbin/sshd -D
root       903  0.0  0.0  16412   140 ttyS0    Ss+  Sep09   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220
root       907  0.0  0.1 288880  1524 ?        Ssl  Sep09   1:11 /usr/lib/policykit-1/polkitd --no-debug
root       908  0.0  0.0  14888   136 tty1     Ss+  Sep09   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
mysql      943  0.1 20.6 1161772 208636 ?      Sl   Sep09  68:26 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
leonardo  1068  0.0  0.1  76636  1028 ?        Ss   Sep09   0:00 /lib/systemd/systemd --user
leonardo  1072  0.0  0.2 111788  2388 ?        S    Sep09   0:00 (sd-pam)
root      6750  0.0  0.0      0     0 ?        I    Oct12   0:01 [kworker/0:1]
root     13084  0.0  0.0  42904   820 ?        Ss   Sep12   0:30 /lib/systemd/systemd-udevd
leonardo 16084  0.0  0.0   4632    72 ?        S    11:26   0:00 sh -c NODE_PATH=. NODE_ENV=production node server.js
leonardo 16085  0.0  9.0 1303708 90912 ?       Sl   11:26   0:05 node server.js
www-data 16095  0.0  6.5 592644 65988 ?        S    11:26   0:02 /usr/sbin/apache2 -k start
www-data 16096  0.0  6.1 512560 62084 ?        S    11:26   0:01 /usr/sbin/apache2 -k start
root     16993  0.0  0.0 105692   996 ?        Ss   12:39   0:00 sshd: leonardo [priv]
leonardo 17093  0.0  0.0 107992  1008 ?        S    12:39   0:00 sshd: leonardo@pts/1
leonardo 17094  0.0  0.1  23204  1716 pts/1    Ss+  12:39   0:00 -bash
systemd+ 17556  0.0  0.0  71848   724 ?        Ss   Sep12   0:03 /lib/systemd/systemd-networkd
systemd+ 17571  0.0  0.1  70756  1872 ?        Ss   Sep12   1:13 /lib/systemd/systemd-resolved
systemd+ 17585  0.0  0.0 141928   596 ?        Ssl  Sep12   0:04 /lib/systemd/systemd-timesyncd
root     17604  0.0  4.3 184004 43936 ?        S<s  Sep12   7:58 /lib/systemd/systemd-journald
root     18184  0.0  0.0      0     0 ?        I    14:11   0:00 [kworker/0:0]
leonardo 18215  0.0  4.4 966088 44652 ?        Ssl  14:12   0:01 PM2 v3.5.1: God Daemon (/home/leonardo/.pm2)
www-data 18227  0.0  5.7 590632 58468 ?        S    14:12   0:00 /usr/sbin/apache2 -k start
www-data 18231  0.0  4.6 511832 46832 ?        S    14:12   0:00 /usr/sbin/apache2 -k start
www-data 18232  0.0  2.0 504524 20264 ?        S    14:12   0:00 /usr/sbin/apache2 -k start
root     18261  0.0  0.0      0     0 ?        I    14:14   0:00 [kworker/u2:1]
root     18311  0.0  0.0      0     0 ?        I    14:19   0:00 [kworker/u2:0]
www-data 18368  0.0  3.6 505148 37244 ?        S    14:26   0:00 /usr/sbin/apache2 -k start
root     18438  0.0  0.0      0     0 ?        I    14:35   0:00 [kworker/u2:2]
www-data 18441  0.0  1.9 504244 19308 ?        S    14:35   0:00 /usr/sbin/apache2 -k start
www-data 18442  0.0  1.9 504244 19308 ?        S    14:35   0:00 /usr/sbin/apache2 -k start
www-data 18443  0.0  1.9 504244 19308 ?        S    14:35   0:00 /usr/sbin/apache2 -k start
www-data 18445  0.0  1.9 504304 19440 ?        S    14:35   0:00 /usr/sbin/apache2 -k start
root     18458  0.0  0.7 105684  7216 ?        Ss   14:36   0:00 sshd: leonardo [priv]
leonardo 18538  0.0  0.5 107984  5504 ?        S    14:36   0:00 sshd: leonardo@pts/0
leonardo 18539  0.1  0.5  23204  5144 pts/0    Ss   14:36   0:00 -bash
leonardo 18558  0.0  0.3  40092  3460 pts/0    R+   14:37   0:00 ps aux
root     24135  0.0  0.0      0     0 ?        I<   Sep12   0:00 [xfsalloc]
root     24136  0.0  0.0      0     0 ?        I<   Sep12   0:00 [xfs_mru_cache]
do-agent 28788  0.0  1.3 496372 14064 ?        Ssl  Sep14   5:51 /opt/digitalocean/bin/do-agent --syslog

我的server.js

const express = require( 'express' )
const axios = require( 'axios' )
const next    = require( 'next' )
const cacheableResponse = require('cacheable-response')

// Import middleware.
const routes = require( './routes' )

// Setup app.
const app     = next( { dev: 'production' !== process.env.NODE_ENV } )
const handle  = app.getRequestHandler()
const handler = routes.getRequestHandler( app )

const ssrCache = cacheableResponse({
  ttl: 1000 * 60 * 60, // 1hour
  get: async ({ req, res, pagePath, queryParams }) => ({
    data: await app.renderToHTML(req, res, pagePath, queryParams)
  }),
  send: ({ data, res }) => res.send(data)
})

app.prepare()
  .then( () => {

    // Create server.
    const server = express();

    // Use our handler for requests.
    server.use( handler );

    // Don't remove. Important for the server to work. Default route.
    server.get( '*', ( req, res ) => {
      ssrCache({ req, res })
    } );

    // Get current port.
    const port = process.env.PORT || 8080;

    // Error check.
    server.listen( port, err => {
      if ( err ) {
        throw err;
      }

      // Where we starting, yo!
      console.log( `> Ready on port ${port}...` );
    } );
  } );

1 个答案:

答案 0 :(得分:1)

这可能由于多种原因而发生。请检查应用程序本身是否正在运行任何恶魔。运行ps aux || grep node会看到什么。如果您可以在此处发布app.jsserver.jsindex.js或充当应用程序文件主文件的任何内容,这将有助于诊断问题。

如果您要设置任何环境变量(例如生产环境),则可以显式地进行设置,即export NODE_ENV=production

您可以使用以下命令使用pm2在没有npm的情况下启动server.js应用程序 pm2 start server.js -- --prod应该可以正常工作。

除此以外,我建议使用pm2 config file,这是使用pm2脚本的正确方法。