node.js가 'npm start'를 표현하는 앱을 중지하는 방법
express v4.x로 node.js 앱을 빌드한 다음 npm까지 앱을 시작합니다.제 질문은 앱을 어떻게 정지시키느냐는 것입니다.npm 정류장이 있습니까?
employment npm stop 시 오류를 포함
/home/nodetest2# npm stop
> nodetest2@0.0.1 stop /home/nodetest2
> pkill -s SIGINT nodetest2
pkill: invalid argument for option 's' -- SIGINT
npm ERR! nodetest2@0.0.1 stop: `pkill -s SIGINT nodetest2`
npm ERR! Exit status 2
예, npm은 중지 스크립트도 제공합니다.
npm help npm-scripts
프리스톱, 스톱, 포스트스톱:npm stop 명령에 의해 실행됩니다.
위의 내용 중 하나를 패키지에 설정합니다.json, 그다음에 사용npm stop
npm help npm-stop
설정만 하면 정말 간단하게 할 수 있습니다.app.js
,
process.jp = myApp;
그리고 대본에. json.
"scripts": {
"start": "app.js"
, "stop": "pkill --signal SIGINT myApp"
}
그러니까, 이게 나라면 내가 사용했을 겁니다.pm2
자동적으로 이 일을 처리한 것 같은 것 말입니다
여기에 나와 있는 다른 솔루션들은 모두 OS에 의존합니다.모든 OS를 위한 독립적인 솔루션은 다음과 같이 socket.io 을 사용합니다.
package.json
에는 두 가지 스크립트가 있습니다.
"scripts": {
"start": "node server.js",
"stop": "node server.stop.js"
}
server.js - 당신의 일상적인 급행물은 여기에 삽니다.
const express = require('express');
const app = express();
const server = http.createServer(app);
server.listen(80, () => {
console.log('HTTP server listening on port 80');
});
// Now for the socket.io stuff - NOTE THIS IS A RESTFUL HTTP SERVER
// We are only using socket.io here to respond to the npmStop signal
// To support IPC (Inter Process Communication) AKA RPC (Remote P.C.)
const io = require('socket.io')(server);
io.on('connection', (socketServer) => {
socketServer.on('npmStop', () => {
process.exit(0);
});
});
server.stop.js
const io = require('socket.io-client');
const socketClient = io.connect('http://localhost'); // Specify port if your express server is not using default port 80
socketClient.on('connect', () => {
socketClient.emit('npmStop');
setTimeout(() => {
process.exit(0);
}, 1000);
});
테스트 해보세요.
npm start
(평소처럼 서버를 시작하려면)
npm stop
(이제 실행 중인 서버가 중지됩니다.)
위의 코드는 테스트되지 않았지만(내 코드의 컷다운 버전이며, 내 코드는 작동합니다) 그대로 작동하기를 바랍니다.어느 쪽이든 socket.io 을 사용하여 서버를 중지하려면 일반적으로 취해야 할 방향을 제공합니다.
MAC OS X(/BSD)의 경우: ls of (list open files) 명령을 사용해 볼 수 있습니다.
$ sudo lsof -nPi -sTCP:LISTEN
이러저러한
$ kill -9 3320
제안한 솔루션을 시도해보니 앱 이름이 잘려 있었습니다.나는 읽었습니다.process.title
nodejs 문서(https://nodejs.org/docs/latest/api/process.html#process_process_title) 에서 다음과 같이 말합니다.
Linux 및 OS X에서는 argv 메모리를 덮어쓰기 때문에 이진 이름의 크기와 명령줄 인수의 길이로 제한됩니다.
내 앱은 인수를 사용하지 않으므로 이 코드 줄을 내 앱에 추가할 수 있습니다.app.js
process.title = process.argv[2];
그리고 이 몇개의 대사들을 내 것에 추가합니다.package.json
파일
"scripts": {
"start": "node app.js this-name-can-be-as-long-as-it-needs-to-be",
"stop": "killall -SIGINT this-name-can-be-as-long-as-it-needs-to-be"
},
긴 프로세스 이름을 사용합니다.npm start
그리고.npm stop
일은 물론입니다npm stop
실행 중인 모든 프로세스를 항상 종료하지만 저는 괜찮습니다.
netstat -nptl 모든 프로세스로 확인
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 1736/mongod
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1594/sshd
tcp6 0 0 :::3977 :::* LISTEN 6231/nodejs
tcp6 0 0 :::22 :::* LISTEN 1594/sshd
tcp6 0 0 :::3200 :::* LISTEN 5535/nodejs
그리고 단순히 PID 참조에 의해 프로세스가 종료됩니다.제 경우에는 6231/nodejs를 중지하여 다음 명령을 실행합니다.
kill -9 6231
이것은 민트 버전 문제입니다. 대신 cmd를 사용하세요.서버 프로세스를 종료하려면 다음 명령을 실행합니다.
taskkill -F -IM node.exe
ctrl + c
아직도 작동이 안 돼요, 이걸 시도해 보세요이것은 저에게 효과가 있었습니다.
명령줄을 Administrator(관리자)로 실행합니다. 다음 를 실행하여 런래을여다를다를e여n음런s을래den .죽이고 싶은 아이디(PID).트를합니다.
<yourPortNumber>
netstat -ano | findstr :<yourPortNumber>
그런 다음 PID를 식별한 후 이 명령을 실행합니다.
taskkill /PID <typeYourPIDhere> /F
http://www.callstack.in/tech/blog/windows-kill-process-by-port-number-157 에서 @mit$ing을 받게 된 것
kill $(lsof -t -i :PORT_TO_KILL)
간체판포트와 함께 간단한 복사 붙여넣기를 통해 ex.5000을 제거할 수 있습니다.
Windows 컴퓨터(윈도우 10에 있음)의 경우 cli에서 CTRL + C (Cancel/Abort) Command가 작동하지 않고 화면이 다음과 같이 표시됩니다.
ENTER를 먼저 누르거나(또는 아무 키나 가능합니다) Ctrl + C를 누르면 배치 작업을 종료할지 묻는 현재 프로세스가 나타납니다.
아마도 CTRL+C는 상위 프로세스만 종료하고 npm start는 다른 하위 프로세스와 함께 실행됩니다.CTRL+ C 이전에 추가 키를 눌러야 하는 이유는 확실하지 않지만 명령줄을 닫고 다시 시작하는 것보다 더 잘 작동합니다.
확인하려는 관련 문제: https://github.com/mysticatea/npm-run-all/issues/74
여기에 이전 답변에서 나온 아이디어를 혼합한 또 다른 솔루션이 있습니다.플랫폼 독립성에 대한 우려를 해소하면서 '킬 프로세스' 방식을 취하고 있습니다.
서버 프로세스 트리 죽이기를 처리하기 위해 트리 킬 패키지에 의존합니다.프로젝트에서 전체 프로세스 트리를 삭제하는 것이 필요하다는 것을 알게 되었습니다. 왜냐하면 몇몇 도구들(예:babel-node
프로세스를 하위 프로세스를 생성합니다.kill하면 일면는우을된로할수다만e다수fee-hnu,a만l로se-으로 대체할 수 있습니다.process.kill()
방법.
. (의 두 은 은 과 은 과 의 과 은 의 은 과 ).spawn()
서버를 실행하기 위한 구체적인 레시피를 반영하여 수정해야 함):
build/start-server.js
import { spawn } from 'child_process'
import fs from 'fs'
const child = spawn('node', [
'dist/server.js'
], {
detached: true,
stdio: 'ignore'
})
child.unref()
if (typeof child.pid !== 'undefined') {
fs.writeFileSync('.server.pid', child.pid, {
encoding: 'utf8'
})
}
build/stop-server.js
import fs from 'fs'
import kill from 'tree-kill'
const serverPid = fs.readFileSync('.server.pid', {
encoding: 'utf8'
})
fs.unlinkSync('.server.pid')
kill(serverPid)
꾸러미의json
"scripts": {
"start": "babel-node build/start-server.js",
"stop": "babel-node build/stop-server.js"
}
에서 를 합니다 에서 은 에서 합니다 를 ).npm start
는 즉시 반환되며 서버가 중지될 때까지 차단되지 않습니다.동작을 한다면,을,f를 간단히 제거하면 .options.detached
에게 spawn()
에게 전화를 .child.unref()
.
json 파일에 앱 정지 스크립트가 없는 경우, 제가 사용하는 옵션은 cmd에서 ctrl+C만 누르면 됩니다.
아주 간단하다면, 그냥 그 과정을 없애버리세요.
localmacpro$ ps
PID TTY TIME CMD
5014 ttys000 0:00.05 -bash
6906 ttys000 0:00.29 npm
6907 ttys000 0:06.39 node /Users/roger_macpro/my-project/node_modules/.bin/webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
6706 ttys001 0:00.05 -bash
7157 ttys002 0:00.29 -bash
localmacpro$ kill -9 6907 6906
pm2를 사용하시면 됩니다.
https://pm2.keymetrics.io/docs/usage/quick-start/
설치 후 터미널을 입력하기만 하면 됩니다.
pm2 start app.js
그리고 나서.
pm2 stop 0
합니다.
모든 (3) 솔로션은 다음
1 - ctlr + C
2- in json 파일은 정지하는 스크립트를 작성합니다.
"scripts": { "stop": "kill all - SIGINT this-name-can-be-time-to-needs" },
*명령보다 쓰기 // npm 중지 //
3- PC를 다시 시작합니다.
운영 환경의 경우 Forever.js를 사용해야 합니다.
시작 및 중지 노드 프로세스에 매우 유용하기 때문에 실행 중인 앱도 나열할 수 있습니다.
https://github.com/foreverjs/forever
조합 ctrl + z Myosis Ubuntu 를 눌러야 합니다.
언급URL : https://stackoverflow.com/questions/23258421/how-to-stop-app-that-node-js-express-npm-start
'source' 카테고리의 다른 글
PHP/MySQL 응용 프로그램에서 멀티코어 CPU를 어떻게 잘 활용합니까? (0) | 2023.09.14 |
---|---|
봄에 XML 구성에 비해 JavaConfig의 이점은 무엇입니까? (0) | 2023.09.14 |
Basic Powershell - Word Docx를 PDF로 일괄 변환 (0) | 2023.09.09 |
Spring RedisConnectionFactory 트랜잭션이 Pool에 연결을 반환하지 않은 다음 소진 시 차단됩니다. (0) | 2023.09.09 |
Chrome에서 인쇄할 때 href 값을 제거해야 함 (0) | 2023.09.09 |