라는 스크립트를 만들었습니다 purging.sh
. 나는 이 스크립트에서 명령을 사용하고 cd
있으며 스크립트는 디렉토리를 여러 번 변경하므로 cd
명령에 일부 변수를 할당하여 디렉토리를 변경하는 데 도움이 됩니다.
cd /home/parthipan/test/wireshark/$a/$b
source ./purging.sh
스크립트를 실행하려면 또는 를 사용해야 합니다 . ./purging.sh
.
하지만 crontab을 사용하는 스크립트를 정리해야 합니다.
10 01 * * * . /home/parthipan/test/purging.sh
내 스크립트 시작:
#!/bin/bash
a=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 1-4 )
b=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 5-6 )
c=$( date -d "`date` -60 days" "+%Y%m%d" | cut -b 7-8 )
cd /home/parthipan/test/wireshark/$a/$b
d=$( ll | awk -F " " '{print $9}' | awk -v value=$c '$1 < value' | sed "/^$/d" | xargs )
echo "The Days archiving are: $d"
e=$( ll | awk -F " " '{print $9}' | awk -v value=$c '$1 < value' | sed "/^$/d" | wc -l )
f=$( date -d "`date` - 61 days" "+%Y%m%d" | cut -b 5-8 )
if (( $e > 0 ))
then
tar --no-overwrite-dir -czvf backup_$f.tar.gz $d
mv backup_$f.tar.gz /home/parthipan/test/logs_backup
#rm -rf $d
logger Data has been purged
위 스크립트는 계속 실행되고 명령은 종료됩니다 fi
. 일반적으로 cli에서는 작동하지만 crontab에서는 작동하지 않습니다. 메시지가 인쇄되도록 마지막 줄에 logger 명령을 사용했습니다 /var/log
.
그러나 메시지 인쇄는 다음과 같습니다.
May 1 00:50:01 parthipan-nadar systemd: Started Session 24 of user root.
그 이후에는 다른 형태의 로깅이 없습니다. 그러나 필요한 로그는 Data has been purged
.
답변1
ll
스크립트에서 별칭을 사용하는 것처럼 보이기 때문에 쉘에서 가져올 때 작동합니다 . cron에서 실행되는 스크립트에는 사용자 환경이 없으므로 특정 별칭이나 환경 변수에 의존하기보다는 더 명시적으로 설정해야 합니다( 외부 또는 외부에 있는 실행 파일을 PATH
호출하는 경우 ). 별칭이 의 별칭 인 경우 해당 별칭을 대신 사용하세요 (아래 항목 1 참조)./bin
/usr/bin
ll
ls -l
ls -l
기타 의견:
ls를 구문 분석하지 마세요. 기간을 기준으로 파일을 필터링해야 하는 경우
stat
또는 를 사용하세요find
.날짜 호출 내에 날짜 호출을 중첩할 필요는 없습니다.
-d "60 days ago"
단지 연도, 월, 일을 얻기 위해 date를 6번(!!) 호출하지 마세요.
read -r year month day < <(date -d "60 days ago" "+%Y %m %d")
설명적인 변수 이름을 사용하십시오.
a
b
c
...아주 나쁜.