Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[Shell] crontab 에서 date가 동작되지 않을 때 Computer & Program

콘솔에서 동작하는 명령을 그대로 crontab에 등록했다. 그런데.. 실행이 되지 않는다. TㅅT 1시간 동안 삽질을 하며 찾아낸 것은!! 작은 기호 하나!! TㅅT


내가 원하는 동작은 다음과 같다.
1. 기존에 생성된 crontab 로그 파일 이름 변경
2. 설정 (config) 파일 복사
3. 프로그램 실행
4. crontab 로그 - 일반적인 I/O Redirection 사용

그래서 crontab에 아래처럼 등록했다. (편의상 경로는 /로 가정)
00 04 * * * mv -f /test.log /test.log.`date +%Y%m%d%h%M%s`;cp /test.conf.local /test.conf;/test.sh 1>/test.log 2>&1

로그 파일 이름을 변경하는 것을 스크립트에 넣고 싶으나, crontab으로 생성되는 로그 파일이기 때문에 가능하면 스크립트에서는 건드리고 싶지 않았다. 파일명과 같은 dependency도 없애고 싶고.. 아무튼.. 이렇게 로그 파일을 시간 별로 백업하고 프로그램을 실행하고 싶었는데.. 시간이 돼도 미동조차 하지 않는다 TㅅT

1시간 동안 검색과 여러 테스트를 거쳐 date에 문제가 있음을 확인했다. 그리고 검색된 페이지를 뚫어져라 다시 쳐다보니 보였다. back shash(\)가.. -ㅅ-;;;

알아낸 사실.. crontab에서는 '%'를 그대로 사용하면 안된다. (crontab을 잘 모르지만.. 아마도 예약어인듯..) 때문에 '%'대신 '\%'를 사용해야 한다. 따라서 위의 crontab에 등록된 라인은 아래처럼 변경하면 된다. (backquote(`)는 알아보기 힘들다고 $(...)를 사용하라는 댓글도 있어서 써보니 괜찮은 것 같기도 하고..)
00 04 * * * mv -f /test.log /test.log..$(date +\%Y\%m\%d\%H\%M\%S);cp /test.conf.local /test.conf;/test.sh 1>/test.log 2>&1


- 해결 실마리 : Cron error with using backquotes

핑백

덧글

  • 역시나야 2011/10/31 18:04 # 답글

    밥오!. 그래서 .sh 를 만들어서 사용한단다. ㅋ
  • Sigel 2011/11/02 14:39 #

    하지만 crontab log라서 .sh로 만들기가 거시기.. ㅋㅋ
  • 양갱천하 2015/08/28 17:20 # 삭제 답글

    완전 감사합니다!
댓글 입력 영역

Google AdSense (text/image)