pm2에서 관리하는 Node.js 프로세스를 Node.js에서 pm2를 시작하고 관리합니다.
소개
나는 Node.js의 데몬화 도구로서 (어쩐지 고기능이라는 소문이므로) pm2을 이용하고 있습니다.
pm2는 프로그램에서 호출할 수도 있으므로 이번에는 이 기능을 이용하여 pm2 프로세스를 정기적으로 재시작하는 스크립트를 짜 봅니다.
기본 기능으로 스케줄링이 없을까 ...?
참고 : Using PM2 programmatically
튜토리얼의 코드
pm2kick.js
var pm2 = require('pm2');
// Connect or launch PM2
pm2.connect(function(err) {
// Start a script on the current folder
pm2.start('test.js', { name: 'test' }, function(err, proc) {
if (err) throw new Error('err');
// Get all processes running
pm2.list(function(err, process_list) {
console.log(process_list);
// Disconnect to PM2
pm2.disconnect(function() { process.exit(0) });
});
});
})
이것을 pm2kick.js로 실행하면
$ node pm2kick.js
test.js가 pm2 시작됩니다. pm2 list 명령으로 확인할 수 있다고 생각합니다.
$ pm2 list
┌────────────────────┬────┬──────┬──────┬────────┬───────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ PID │ status │ restarted │ uptime │ memory │ watching │
├────────────────────┼────┼──────┼──────┼────────┼───────────┼────────┼─────────────┼──────────┤
│ test │ 0 │ fork │ 6545 │ online │ 1 │ 15s │ 18.648 MB │ disabled │
node-cron을 사용하여 pm2를 다시 시작합니다.
준비
pm2,time,cron을 설치합니다.
$ npm i --save pm2 time cron
코드
프로세스의 재시작은
restart();
라고 하는 메소드를 이용합니다.이번에는 모든 프로세스를 다시 시작하고 싶으므로 첫 번째 인수에 all을 전달합니다.
pm2.restart('all', callback);
를 이용합니다.pm2restart.js
var pm2 = require('pm2');
var cronJob = require('cron').CronJob;
var cronTime = "0 0 6 * * *"; // 毎日朝6時に実行
//プロセスの状態を確認して終了させる
function showAndDone(){
pm2.list(function(err, process_list) {
console.log(process_list);
// Disconnect to PM2
pm2.disconnect(function(){
process.exit(0);
});
});
}
//全て再起動
function restartAll(){
pm2.restart('all', function(err, proc){
showAndDone();
});
}
var job = new cronJob({
cronTime: cronTime,
onTick: function(){ //指定時に実行したい関数
console.log('onTick!', new Date()); //時間表示
//pm2関連を実行
pm2.connect(function(err) {
restartAll();
});
},
onComplete: function() { //ジョブの完了または停止時に実行する関数
console.log('onComplete!');
},
start: false // コンストラクタを終する前にジョブを開始するかどうか
// timeZone: "Japan/Tokyo" //タイムゾーン
});
job.start();
확인
방금 만든 pm2 프로세스 모니터링용 pm2restart.js 자체도 pm2 프로세스로 등록합니다. 이해하기 어렵다.
$ pm2 start pm2restart.js
cron이 제대로 움직여 주면 지정된 시간이 오면 pm2restart를 포함하여 모든 프로세스가 다시 시작됩니다.
↓지정 시간 후↓
모든 프로세스가 다시 시작되었음을 알 수 있습니다.
참고 링크
Reference
이 문제에 관하여(pm2에서 관리하는 Node.js 프로세스를 Node.js에서 pm2를 시작하고 관리합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/n0bisuke/items/6396e4fb0a943fd8906c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)