며칠동안 삽질을 했다..
문제의 원인은 서버 3대가 전부 centos가 설치되어 있는데 그 중 한대만 유난히 하루 기준으로 -2분정도씩 시간이 틀어졌다..😱
매일 가서 확인할 수 없는 환경 + DB 서버 = welcome to hell 👹
리눅스 입문자라 열심히 구글링해본 결과 crontab이라는게 존재했고 한줄만 작성하면 해결이 된다기에 일단 낯서니 "10분마다 .txt 파일에 현재시간을 작성"을 해봤고 정상적으로 이뤄지기에 아래처럼 "10분마다 시간을 동기화해라"라고 서버에 배치를 돌려놓고 퇴근했다.
$ crontab -e
$ */10 * * * * ntpdate 시간 동기화 IP
$ systemctl restart crond
$ crontab -l
...
다음날 아침. 두근두근 과연..!!
...
현실은 역시나 -2분. 왜..? 이럼 된다며..? .sh 파일로 빼서 배치 돌려보기도 하고, 앞에 root를 작성해서 해보기도 하였지만 결과는 같았다.
서버가 나만 미워하나 싶었지만 쓸데 없이 오기가 생겨 이리 해보고 저리 해본 결과.. 결국 해결했다..
/home
밑에 dailyntp
폴더를 생성하고 cronDaily.sh
을 작성했다.$ cd /home
$ mkdir dailyntp
$ cd /dailyntp
$ vi cronDaily.sh
dailyCron.sh
파일에 아래와 같이 한줄만 작성했다.ntpdate 시간 동기화 IP
crontab -e
를 사용하지 않고 /etc/crontab
에 작성을 하기 위해 편집기를 열어 맨 아랫줄에 */10 * * * * root /home/dailyntp/cronDaily.sh
를 작성한다.crontab -l
: 예약된 작업 리스트 확인crontab -e
: 작업 수정(작성)crontab -r
: 예약된 작업 삭제crontab -u 사용자명
: root관리자는 해당 사용자의 crontab 파일을 보거나 삭제, 편집가능* * * * * * 수행할 명령어
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───────── 요일 (0 - 6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)
│ │ │ └───────── 월 (1 - 12)
│ │ └───────── 일 (1 - 31)
│ └───────── 시 (0 - 23)
└───────── 분 (0 - 59)
*/10 * * * * /root/test.sh
: 10분마다 root/test.sh 실행
* * * * * /root/test.sh
: 1분마다 root/test.sh 실행
15,45 * * * * /root/test.sh
: 매시 15분, 45분에 /root/test.sh 실행
0 2 * * * /root/test.sh
: 매일 02:00에 /root/test.sh 실행
30 */6 * * * /root/test.sh
: 매 6시간마다 /root/test.sh 실행 (00:30, 06:30, 12:30, 18:30)
crontab -e
, /etc/crontab
둘 다 작동은 하니 해보고 되는것으로 설정하면 된다. 이왕이면 하나의 방식으로 작성하는게 나중에 헷갈리지 않을것이다.
안되는 이유가 궁금해서 찾아보니 환경 변수 문제로 crontab이 작동안할 수도 있다고 한다.
crontab -e
에서 아래와 같이 작성하면 해결된다고 하니 언젠가... 한번 시도해보자.
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
이 글이 나처럼 머리를 쥐어 뜯고 있는 누군가에게 도움이 되길 바란다. 🤢
잘보고 갑니다