쉘프로그래밍 정말 답답합니다.
글쓴이: jjaiwook79 / 작성시간: 토, 2004/01/24 - 3:01오후
저는 지금 cron에 등록시켜 5일이 지난화일을 특정 디렉터리에서 지우고 싶습니다.
find 명령을 사용해서 이름으로 찾으려합니다.
만든날짜보다는 제가 파일을 만들당시에 날짜를 사용해서 파일명을 만들기 때문에 그 방법을 택했습니다.
그런데 문제가 있습니다.
쉘스크립트를 만들고 직접 실행시키면 잘 돌아가지만
그것을 crontab 에 넣고 실행시키면 find 가 안됩니다. 검색이 안됩니다.
find 명령에서
-name \"*${olddate}*\"
-name *${olddate}*
-name \'*${olddate}*\'
이렇게 다 해봤지만 역시 안됐습니다. :oops:
#!/bin/bash olddate=`date --date '5 days ago' | awk -F'. ' '{print $1 $2 $3}'` <-- 날짜가 잘 뽑혀 나옵니다. 20040124 와 같이. backdir=/back find $backdir/ -name "*$olddate*" -exec rm -rf {} \;
스크립트는 위와 같습니다.
crontab 으로 실행이 안되서 다른 방법을 써봤지만 역시 안됩니다.
#!/bin/bash olddate=`date --date '5 days ago' | awk -F'. ' '{print $1 $2 $3}'` backdir=/back ls /back/ > /tmp/list grep ${olddate} /tmp/list > /tmp/list_old for i in `cat /tmp/list_old` do rm -rf $i done
grep 명령도 안먹는 것 같습니다.
이거땜에 몇일째 고민입니다.
고수님들의 많은 도움 바랍니다. :?
Forums:
Re: 쉘프로그래밍 정말 답답합니다.
경로 문제 아닐까요?
스크립트로 만든후에 crontab 에 다음과 같이 등록시켜보심이 어떨까요?
---
배려하는 마음을 갖자.
cron 디버그하는법
cron 디버그하는법
cron 실행도중 출력되는 값을 보려면
설정(crontab -e) 할때 이변수 값을 실행될 라인 위쪽에 넣으면됩니다.
#다음주소로 과정과 결과를 보넵니다.
MAILTO=user@hostname
#이건 로컬 user로 메일이 옵니다.
MAILTO=user
#이다음라인부터는 결과를 안보넵니다.
MAILTO=
#그리고 패스는 이렇게 합니다.
PATH=/bin:/sbin
#shell선택
SHELL=/bin/bash
이렇게 하면됩니다.
님의 스크립트는 보이는데
근데 crontab 설정을 어떻게 했는지는 안올리셨네요 ?
제가보기에 언어 설정이 달라서 그런것 같습니다.[code:1]
제가보기에 언어 설정이 달라서 그런것 같습니다.
감이 좀 오시죠? ^^;
추가로, awk로 date의 출력 결과를 재 포맷 하시기 보다는
date 자체의 포맷 기능을 사용하시는것이 더 좋은방법일것 같습니다.
♪ I'll play the blues for you. ♪
/etc/crontab에 PATH 지정이 잘 되었나 확인해보시거나 f
/etc/crontab에 PATH 지정이 잘 되었나 확인해보시거나
find나 rm같은 명령어들의 풀경로를 적어서 한번 해보세요.
(/usr/bin/find,/bin/rm 이런식으로...)
예전에 솔라리스에서 cp를 /usr/bin/cp 이렇게 하지않고
그냥 cp로만 썼다가 비슷한 고생을 했던 경험이 있네요.
로그인해서 직접 돌리면 잘 돌아가는데 크론으로 돌리면
안돌아가는 현상말이죠...^^
Urban Daydreams~~
아~ 그 부분이 문제였군요.
언어 설정이 다른 상태에서 awk로 재포맷하는 방법을 쓰니까 검색이 안됐던 것이였군요.
감사합니다. 문제가 해결됐습니다.
find 명령으로 간단히 해결..
위에 처럼 스크립트를 만드시면 될듯...
생성일 기준으로 /home/user1/logs 의 내용중 5일 이전의 모든 파일이 삭제됩니다.
주의하실 점은 모든 Path를 full path로 사용하세요.
댓글 달기