node-schedule은 Node.js에서 동작하는 스케줄링을 위한 모듈입니다. 원하는 시간에 작업을 수행할 수 있는 기능을 제공하고 유사한 모듈로는 node-cron이 있습니다. 자바스크립트의 setInterval 함수나 setTimeout 함수로도 동일한 기능을 구현할 수 있지만 그런 작업을 더 편하게 할 수 있도록 도와줍니다.

GitHub Repository: https://github.com/node-schedule/node-schedule

 

1. 모듈 추가

npm i node-schedule

 

2. Cron 스타일의 스케줄링
유닉스 계열의 Job 스케줄러인 cron의 표현식을 사용해서 스케줄링을 적용할 수 있습니다.

* * * * * *
│ │ │ │ │ │
│ │ │ │ │ └ 요일(0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── 월 (1 - 12)
│ │ │ └────────── 일 (1 - 31)
│ │ └─────────────── 시 (0 - 23)
│ └──────────────────── 분 (0 - 59)
└───────────────────────── 초 (0 - 59, OPTIONAL)
const schedule = require('node-schedule');

// 매일 10시 정각에 '스크럼 시간입니다.' 출력
let job = schedule.scheduleJob('0 10 * * *', () => {
  console.log('스크럼 시간입니다.')
});

 

3. 날짜 기반 스케줄링
Date 객체를 전달해서 스케줄링 할 수 있습니다. Date 객체에 설정된 시간에 1회 작업을 수행합니다.

const schedule = require('node-schedule');

// 2020년 1월 1일 0시 0분 0초 - 월은 0부터 시작
const date = new Date(2020, 0, 1, 0, 0, 0);
let job = schedule.scheduleJob(date, () => {
console.log('새해가 밝았습니다.');
});

 

4. Recurrence Rule 스케줄링(반복 작업)
cron 표현식으로도 동일하게 반복 스케줄링 작업을 할 수 있지만 Recurrence Rule로 명시적으로 표현할 수 있습니다.

const schedule = require('node-schedule');

let recurrenceRule = new schedule.RecurrenceRule();
// Range 객체로 범위 설정
recurrenceRule.second = new schedule.Range(0, 59);
// 숫자 리터럴로 지정된 값 설정
recurrenceRule.minute = 20;

// 매시 20분 매초에 메시지 출력
schedule.scheduleJob(recurrenceRule, () => {
    console.log('Hello!')
});

 

5. 객체 리터럴
Recurrence Rule 대신 객체 리터럴로 전달할 수도 있습니다. 객체 리터럴로 전달 시 프로퍼티로는 second, minute, hour, date, month, year, dayOfWeek, start, end, rule이 있습니다.

const schedule = require('node-schedule');

// 매 0초 마다 'hi' 출력
schedule.scheduleJob({
  second: 0
}, () => {
  console.log('hi')
});
const schedule = require('node-schedule');

// startTime, endTime, rule 조합
let start = new Date(Date.now() + 5000); // 5초 뒤
let end = new Date(startTiime.getTime() + 5000); // 10초 뒤

// start ~ end 동안 매초 마다 'hi' 출력
schedule.scheduleJob({
  start,
  end,
  rule: '*/1 * * * * *'
}, () => {
  console.log('hi');
});

'밤을 지새다 > Javascript' 카테고리의 다른 글

Node.js로 슬랙 API 연동  (0) 2020.04.05
node-schedule  (0) 2020.04.05

Case #1. FAIL: httpd config references DNS name without associated gear: 'jbossews-nnoco.example.com'


위 테스트는 애플리케이션이 정상적으로 제거되지 않은 경우에 실패한다.

Step 1. cat /etc/httpd/conf.d/openshift/nodes.txt | grep jbossews-nnoco.example.com을 실행하여 해당 도메인과 연결된 기어의 UUID를 복사한다.
# cat /etc/httpd/conf.d/openshift/nodes.txt | grep jbossews-nnoco.example.com
jbossews-nnoco.example.com 127.12.146.130:8080|541fcc9e818cadf578000004|541fcc9e818cadf578000004
jbossews-nnoco.example.com/health HEALTH|541fcc9e818cadf578000004|541fcc9e818cadf578000004
jbossews-nnoco.example.com/haproxy-status 127.12.146.131:8080/|541fcc9e818cadf578000004|541fcc9e818cadf578000004

Step 2. oo-admin-gear destroygear --with-container-uuid 541fcc9e818cadf578000004 를 실행하여 정상적으로 제거되지 않은 기어를 제거한다.

# oo-admin-gear destroygear --with-container-uuid 541fcc9e818cadf578000004

Killing gear processes for name:541fcc9e818cadf578000004...

Deleting cgroup info...

Deleting stale info from /var/lib/openshift/.httpd.d/ files...

  for 541fcc9e818cadf578000004

  for jbossews-nnoco.example.com



참고 문서 : https://bugzilla.redhat.com/show_bug.cgi?id=1057727





AWS 상에 설치한 OpenShift의 브로커를 이중화하고, 잘 돌아가는 것을 확인하고, 대표님께서 보고 싶다고 하셔서 보여드리려고 했더니. 그때부터였다.

멀쩡히 돌아가고 MCollective Ping도 확인했을 때 잘 돌아가던 그놈이 배신을 했다.

OpenStack에 설치했던 Broker의 설정을 변경해서 AWS의 Node에도 연결을 해보고,

새로 Broker를 몇번이나 다시 설치해서 해보고, 설정값도 이리저리 바꾸어보고, 의심가는 것들을 모두 해보고 확인해봤지만 계속 안된다.


3일 째..

여전히 AWS의 문제는 해결이 되지 않아서 새로 클러스터를 구성하려다가 귀찮았던 바람에 Broker와 Node만 새로 설치하고, ActiveMQ와 MongoDB는 이전의 것을 그대로 두고 사용했다. 여전히 안된다. MongoDB 쪽에는 전혀 문제가 없다.

역시 Broker-ActiveMQ-Node 간의 통신 문제인데, 잘 되던 게 갑자기 안되니 도무지 이유를 모르겠고, 웬만한 트러블 슈팅을 다 할 수 있다고 자만하던 내게 벌을 내린게 아닌가 싶을 정도다.


그러다가 다시 오픈시프트 관련 메일링 리스트를 뒤져보다가

같은 문제의 제목을 찾았고, 전에 MCollective와 관련해서 한번 읽었던 글이지만 혹시나 하는 지푸라기라도 잡는 심정에 다시 천천히 읽어봤다.

그러다가 이 스레드에서 Brenton찡이 clock skew가 아니냐고 물어보길래 응? 설마 이것 때문에 그러려고.. 하다가 혹시나 싶어서 VM들의 시간을 확인해보니, Broker와 Node는 일치하지만 ActiveMQ는 2분 정도의 차이가 났다.

ActiveMQ가 설치된 서버에 ntpd를 설치하고 clock.redhat.com과 시간 동기화를 한 후 접속해보니 되는게 아닌가..!?


아.. 인생 무상.. 사람이 이렇게 미칠 수도 있겠구나 싶었다. 아니.. 안될거면 처음부터 안될 것이지 되다가 아니되냔 말이다. 하하.

이 문제 때문에 사흘을 버리긴 했지만.. 다시 돌아가니 다행이다. ㅠㅠ

'마음이 뛰다' 카테고리의 다른 글

연락처  (0) 2015.01.23
나름 다듬어 가기  (2) 2015.01.08
멀쩡하던 OpenShift가 죽었다.  (0) 2014.10.17
OpenShift Node 설정 중...  (0) 2014.09.18
새로운 영역의 공부  (0) 2014.07.25
Do you want to stay here?  (0) 2013.11.22

+ Recent posts