Я заметил, что приложения, запущенные с 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}...` );
} );
} );