pm2에서 관리하는 Node.js 프로세스를 Node.js에서 pm2를 시작하고 관리합니다.

10161 단어 pm2cronNode.js
※ 알기 어려운 타이틀입니다만 양해 바랍니다.

소개



나는 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를 포함하여 모든 프로세스가 다시 시작됩니다.

↓지정 시간 후↓



모든 프로세스가 다시 시작되었음을 알 수 있습니다.

참고 링크


  • h tp : // 정리해 r. 코 m/16991/
  • htp : // / ㎃ 진 c. 이. jp / ぇ b / p 여과 라민 g / 그래서 js / 123719
  • 좋은 웹페이지 즐겨찾기