Приложение Node, запущенное с PM2, не останавливается при остановке процесса - PullRequest
0 голосов
/ 13 октября 2019

Я заметил, что приложения, запущенные с PM2, будут продолжать работать даже после того, как процессы были остановлены или удалены. Это не всегда происходит, особенно если процесс только что был запущен, но если его оставить на некоторое время, оно всегда будет происходить.

Я начинаю свой процесс с:

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

Это работает как задумано.

Однако, если я вернусь к нему через пару дней и выполню:

pm2 stop next

Процесс будет остановлен и исчезнет с выхода pm2 ls. К сожалению, само приложение все еще работает в фоновом режиме, и единственный способ остановить его - это полная перезагрузка моего сервера, что не является оптимальным.

Моя проблема похожа на упомянутую здесь , однако решение не сработало для меня.

Вывод 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

My 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 Ответ

1 голос
/ 13 октября 2019

Это может произойти по нескольким причинам. Пожалуйста, проверьте, не запускает ли само приложение какого-либо демона изнутри. Что вы видите, когда запускаете ps aux || grep node. Если вы можете опубликовать здесь app.js или server.js или index.js или что-нибудь, что выступает в качестве основного файла вашего файла приложения, это поможет диагностировать проблему.

, если вы устанавливаете любую переменную среды, такую ​​какпроизводство вы можете сделать это явно, то есть export NODE_ENV=production

Вы можете запустить приложение server.js без npm с pm2 с помощью команды ниже pm2 start server.js -- --prod Это должно работать без проблем.

Для чего-либо ещечем это, я бы порекомендовал файл конфигурации pm2 это правильный способ использования сценариев pm2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...