Ubuntu 18.04에 cron 을 사용하고 있다.
그런데, 서버 시간이 서울 시간과 달라서 cron이 원하는 때에 제대로 동작되지 않았다.
ubuntu 자체 서버 시간 문제인가 싶어서 우선 date를 입력했더니 역시나,
UTC 시간이 기본 값이었다.
먼저,
이 사이트를 통해서 서버 시간을 변경했고, 다시 date 명령어로 시간을 확인해보니 제대로 동작되는 것을 확인했다.
그런데, 그래도 cron이 원하는 시간에 동작하지 않았다.
다른 설정을 더 해줘야 했던 것.
sudo service cron restart를 했음에도 제대로 동작되지 않았다.
좀 더 구글링을 해보니
stackoverflow.com/questions/35547952/node-cron-is-not-working-on-my-server
sudo dpkg-reconfigure tzdata
이걸 통해 한 번 더 변경을 해줬다. 이후 제대로 동작되는 것을 확인할 수 있었다.
10.19 추가
문제가 아직 해결되지 않았다. 무슨일인가 ...
찾아보니 node-cron 자체에 Timezone을 설정해줘야 했다.
www.npmjs.com/package/node-cron
여기서 timezone을 검색해보면 나옴
var cron = require('node-cron');
cron.schedule('0 1 * * *', () => {
console.log('Runing a job at 01:00 at America/Sao_Paulo timezone');
}, {
scheduled: true,
timezone: "America/Sao_Paulo"
});
이게 최종 문제였다니.
도대체 로컬 시간에 맞게 업데이트를 어떻게 하지가 관건이었는데, 하나를 더 알게 됐다.
Date도 UTC 타임에 맞게 나오고 있었는데 그걸 몰랐다 ㅋ
이 글을 보고 Date()가 아니라, moment라는 라이브러리로 싹 바꿔줬다.
const moment = require('moment-timezone');
// 현재 날짜 구하기
const today = moment().tz("Asia/Seoul").format('YYYY-MM-DD');
// 현재 시간으로부터 7일 전 날짜 구하기
const sevenDaysAgo = moment().tz("Asia/Seoul").subtract(7, 'days').format('YYYY-MM-DD');