linux 에서 정기적인 작업 실행을 위한 corn.
cron 의 사용법은 인터넷 검색 해서 알아보고....
나는 크론 안 되는 경우를 좀 적겠다.
daemon 을 하나 만들어서 정기적으로 실행시키려고 cron 에 등록했는데, 아무리 해도 안되더라.
아래와 같은 내용을 확인해 보아야 한다.
1. cron 은 1분 이하의 정기적 실행은 불가능.
분해능이 1분이다.
2. cron을 매 분, 매 시간 실행시키는 것과, 매 시각 1분, 매일 1시에만 실행시키는 것은 다르다.
예를 들어,
1 * * * * /home/foo.sh
는 매 분마다 foo.sh 를 실행시키는 게 아니고, 매 1 분마다 foo.sh 를 실행시킨다는 뜻으로,
한 시간에 cron 이 60번 실행된다는 뜻이 아니라, 한시간에 1회만, 매 시각 01 분에만 실행된다.
물론
* 1 * * * /home/foo.sh
이것도 마찬가지. 하루 중 매 01 시 에만 60회 실행된다.
예를 들어 매 분, 하루 1440회 ( 60 * 24 ) 실행하려 한다면
1 * * * * /home/foo.sh
* * * * * /home/foo.sh
가 맞다.
하루 한 시간마다 실행하려 한다면,
01 * * * * /home/foo.sh
이 맞다.
3. 왜인지는 모르겠지만, /etc/crontab 에 등록하는 것과 crontab -e 로 등록하는 것의 동작이 다르다.
직접 테스트 해 보고 알게 된 건데,
crontab 의 동작을 설정할 때, 설정파일인
root# vi /etc/crontab
의 내용을 설정하는 것과
root# crontab -e
로 설정하는 게 동작이 다르다.
이건 왜인지 모르겠다.
테스트를 통해서 다르다는 것만 확인했고, 왜 저런 일이 발생하는지 까지는 모르겠다.
추가 : 인터넷 뒤져보다 얻어걸렸다.
vi 로 설정파일 설정하는 것과 crontab -e 로 설정하는 경우, 실행되는 계정 권한이 다르다고 한다.
그러므로 /etc/crontab 파일에 설정할 때에는, 각 스크립트의 계정 권한 설정을 잊지말것.
root# crontab -e 으로 실행할 때는 그럴 필요 없다.
자세한 내용은 http://egloos.zum.com/limjh77/v/10511993 를 참조.
4. cron 으로 작업할 땐 절대경로. 환경변수 설정 잊지말자.
흔히 하기 쉬운 실수 중 하나. 테스트는 상대경로 ( 혹은 경로 확인 없이 그냥 ) 로 해 놓고 실행하지 말 것.
참고로 cron 을 실행했을 때의 실행 경로는, 해당 계정의 경로가 된다.
만약 root 로 실행하고 상대경로 / 절대경로 설정을 안 했다면, ( current path ) , /root/ 아래에 결과 파일들이 생성된다.
로그는 /var/log/cron 에 생성되므로, 이상하면 해당 파일을 살펴볼 것.
5. 실행할 내용은 , 되도록 shell 로 만들것.
예제로 설명하자.
너님이 하루 한 번 일괄작업을 할 파일을 daily.exe 로 만들었다고 치자.
그럼 cron 으로 등록할 때
01 01 * * * /home/daily/daily.exe
로 등록할 거다.
이런 식으로 하지 말라는 거다.
실행 파일을 직접 cron 에 등록하지 말고,
이걸 shell 로 감싼다음 등록하란 뜻. 예를 들어 /home/daily/cronDaily.sh 를 만든다음
cronDaily.sh 내용:
#!/bin/bash
/home/daily/daily.exe
이렇게 만들어 놓고, 크론에는
01 01 * * * /home/daily/cronDaily.sh
이렇게 등록하란 뜻.
왜인지는 모르겠지만, 실행파일을 직접 등록하면 안 됐던 게 저렇게 shell 로 감싼 후 등록하니까 실행됐다.
6. service crond restart
혹시나 해서.
기껏 cron 작업 등록해 놓고, cron 데몬을 재 실행 안하면, 의미없다. service crond restart 로 반드시 재실행 해 주도록 하자.
삽질 끝.
'프로그램' 카테고리의 다른 글
table 에서 셀 간격 확보. (0) | 2015.01.27 |
---|---|
linux 에서, shell ( console ) 의 결과값을 재처리 하려면 exec 계열 함수 대신 popen() 을 이용 (0) | 2015.01.23 |
라즈베리파이로 썼던 Micro SD 카드를 windows 에서 재사용 (2) | 2015.01.11 |
SDL은, 버전이 2 이상이 아니면, MFC 의 Window Handle 과 묶을 수 없다. (1) | 2015.01.04 |
javascript 에서, checkbox 나 radio를 jquery 로 다룰 때, is() + attr() 대신 prop() 를 이용하자. (0) | 2014.10.11 |