"du: 명령을 찾을 수 없음" - CRON 작업에 의해 실행됨

"du: 명령을 찾을 수 없음" - CRON 작업에 의해 실행됨

저는 캡처한 사진을 네트워크의 FTP 서버로 보내는 보안 카메라를 가지고 있으며, 수신 디렉터리에 있는 오래된 파일을 삭제하는 스크립트를 개발했습니다. 명령줄에서 실행했을 때 스크립트가 제대로 실행되었기 때문에 하루에 두 번 스크립트를 실행하도록 crontab에 줄을 추가했습니다.

# Remove old security images / videos from directory
1       7,19    *       *       *               /home/ftp/bin/secpurg

하지만 스크립트가 작동하지 않습니다. 디렉토리가 가득 차서 무슨 일이 일어나고 있는지 확인하기 위해 #!/bin/bash -x를 실행하기로 결정했습니다. 내 메일에 다음 메시지가 나타나기 시작했습니다.

+ fileAge=10
+ SecDir=/home/ftp/_Security/
+ maxDirSize=3000000
++ du -s /home/ftp/_Security/
++ cut -f1
/home/ftp/bin/secpurg: line 11: cut: command not found
/home/ftp/bin/secpurg: line 11: du: command not found
+ secDirSize=
+ '[' -ge 3000000 ']'
/home/ftp/bin/secpurg: line 14: [: -ge: unary operator expected

휴? CRON을 통해 스크립트를 실행할 때 "cut"과 "du"를 찾을 수 없나요? 터미널에서 스크립트를 실행할 때는 이 명령이 제대로 작동하지만 CRON에서 실행할 때는 작동하지 않는 이유에 대해 누군가 말해 줄 수 있습니까?

도움이 될 경우를 대비해 참조용 스크립트를 포함시켰습니다.

#!/bin/bash -x
# secpurg - find and remove older security image files.

# Variable decleration
fileAge=10
SecDir="/home/ftp/_Security/"
maxDirSize=3000000

# Determine the size of $SecDir
secDirSize=`du -s $SecDir | cut -f1`

# If the size of $SecDir is greater than $maxDirSize ...
while [ $secDirSize -ge $maxDirSize ]
do
        # remove files of $fileAge days old or older ...
        find $SecDir* -mtime +$fileAge -exec rm {} \;

        # Generate some output to email a report when files are deleted.
        # set -x

        # Expanding $SecDir* makes for big emails, so we don't do that, but echo the command for reference ...
        echo -e "\t\t[ $secDirSize -ge $maxDirSize ] 
                fileAge=$fileAge
                SecDir=$SecDir
                maxDirSize$maxDirSize
                find $SecDir* -mtime +$fileAge -exec rm {} \;"

        # decrement $fileAge ...
        fileAge=$(( $fileAge - 1 ))

        # and re-determine the size of $SecDir.
        secDirSize=`du -s $SecDir | cut -f1`

        # Just in case things are crazy, don't delete todays files.
        if [ $fileAge -le 1 ]
        then
                secDirSize=0
        fi

        # Stop generating output for email.
        # set +x        
done

--

편집하다:

echo "PATH -$PATH-"스크립트 상단에 추가하면 이메일의 첫 번째 줄이 표시됩니다: + echo 'PATH -~/bin:$PATH-'. 이제 내 질문은 내 PATH에 무슨 일이 일어나고 있으며 유용한 디렉토리를 추가하는 데 권장되는 방법은 무엇입니까? 나는 이것이 내 모든 CRON 작업에 영향을 미칠 것이라고 생각합니다.

--

답변1

대화형 세션에서 작동하므로 cron.

PATH=crontab명시적인 디렉토리를 포함하는 줄이 없는지 확인하십시오 ( cron경로 할당은 셸에서처럼 추가되지 않습니다).

PATH=/home/myhomedir/bin:/usr/local/bin:/bin:/usr/bin

답변2

$PATH에코는 을 제공 하므로 ~/bin:$PATH파일에 ~/.bashrc이와 같은 내용이 있을 가능성이 높습니다.

PATH='~/bin:$PATH'

이는 작은따옴표로 인해 할당 전 경로로 확장되지 않는 PATH리터럴 문자열로 설정됩니다 .~/bin:$PATH$PATH

작은따옴표를 큰따옴표로 변경합니다.

관련 정보