Ubuntu 18.04에 cron 을 사용하고 있다.
그런데, 서버 시간이 서울 시간과 달라서 cron이 원하는 때에 제대로 동작되지 않았다.
ubuntu 자체 서버 시간 문제인가 싶어서 우선 date를 입력했더니 역시나,
UTC 시간이 기본 값이었다.
먼저,
우분투 서버 시간 확인과 time zone 설정 방법 - 익스트림 매뉴얼
우분투를 설치하는 과정에서기본적으로 로케일(Locale) 설정을 하는데 서버 호스팅이나 VPS 같은 해외 가상 호스팅 서비스를 이용해 우분투를 설치한 경우 로케일 설정이 미국이나 일본등으로 되�
extrememanual.net
이 사이트를 통해서 서버 시간을 변경했고, 다시 date 명령어로 시간을 확인해보니 제대로 동작되는 것을 확인했다.
그런데, 그래도 cron이 원하는 시간에 동작하지 않았다.
다른 설정을 더 해줘야 했던 것.
sudo service cron restart를 했음에도 제대로 동작되지 않았다.
좀 더 구글링을 해보니
stackoverflow.com/questions/35547952/node-cron-is-not-working-on-my-server
node-cron is not working on my server
So I'm using node-cron module. I'm using this simple code and it should print go! everyday at 14:17. I'm running the code in my local machine, everythings going well. But then I try to run the cod...
stackoverflow.com
sudo dpkg-reconfigure tzdata
이걸 통해 한 번 더 변경을 해줬다. 이후 제대로 동작되는 것을 확인할 수 있었다.
10.19 추가
문제가 아직 해결되지 않았다. 무슨일인가 ...
찾아보니 node-cron 자체에 Timezone을 설정해줘야 했다.
www.npmjs.com/package/node-cron
https://www.npmjs.com/package/node-cron
Node Cron The node-cron module is tiny task scheduler in pure JavaScript for node.js based on GNU crontab. This module allows you to schedule task in node.js using full crontab syntax. Getting Started Install node-cron using npm: $ npm install --save n
www.npmjs.com
여기서 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"
});
이게 최종 문제였다니.
도대체 로컬 시간에 맞게 업데이트를 어떻게 하지가 관건이었는데, 하나를 더 알게 됐다.
자바스크립트에서 타임존 다루기 (2) : TOAST Meetup
자바스크립트에서 타임존 다루기 (2)
meetup.toast.com
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');