cronjob을 통해 x일이 지난 파일을 삭제할 수 없습니다.

cronjob을 통해 x일이 지난 파일을 삭제할 수 없습니다.

저는 crontab을 사용하여 모든 MySQL 데이터베이스를 별도의 gnu-zip 파일로 백업하고 있습니다. 1일이 지난 백업 파일도 삭제하고 싶습니다.

다음 명령을 사용하여 오래된 파일을 삭제하고 있지만 터미널을 통해서만 작동합니다. 동일한 명령에 cronjob을 설정하면 작동하지 않습니다. 나는 무엇이 잘못되었는지 모른다. 내 명령을 따르면 다음과 같습니다.

find path -type f -mtime +0 -delete

또한 cronjob을 설정할 때 오류를 찾을 수 없습니다.

0 0 * * * /path/auto_delete_backup_database.sh >/path/auto_delete_backup_database.log

어떤 도움이라도 대단히 감사하겠습니다.

고쳐 쓰다

@Kusalananda가 언급했듯이 실행 ls -l결과는 아래 스크린샷에 표시됩니다.

여기에 이미지 설명을 입력하세요.

그렇다면 .sh 파일에 실행에 필요한 권한이 없기 때문입니까? 그렇다면 해당 권한을 어떻게 부여합니까?

답변1

귀하의 질문에 표시된 내용을 바탕으로댓글에서 말했지, 귀하의 스크립트는아니요-line 이 없는 실행 파일입니다 #!.

최소한 스크립트를 실행 가능하게 만들어야 합니다.

chmod +x /path/auto_delete_backup_database.sh

그리고 적절한 줄을 입력하세요 #!:

#!/bin/sh

(앞에 공백이 없는 스크립트의 첫 번째 줄이어야 합니다.)

스크립트가 실행 가능하지 않으면 스크립트로 전혀 사용할 수 없습니다. 이러한 파일을 실행하려고 시도하면 "권한 거부" 오류가 반환됩니다(크론 데몬이 이 사실을 알리기 위해 이메일을 보냈을 가능성이 높습니다).

-line이 없으면 #!호출 쉘에게 스크립트를 실행하는 데 사용할 쉘 해석기를 알려줍니다.때에 따라 다르지어떤 쉘에서 호출되면 어떤 일이 발생합니까? #!스크립트 시작 부분에는 항상 적절한 - 줄이 있어야 합니다 . 이 경우에는 bash특별한 기능을 사용하지 않으므로 /bin/sh.

find분명히 cron을 사용하여 명령을 직접 예약 할 수도 있습니다 .

0 0 * * * find path -type f -mtime +0 -print -delete >/path/auto_delete_backup_database.log 2>&1

나는 이것이 단일 명령 cron 작업에 적합하다고 생각합니다. 더 이국적인 것은 래퍼 스크립트의 일부로 배열하는 것이 가장 좋습니다.

-print위 명령 에 추가하면 find삭제하려는 파일의 이름이 출력됩니다(그렇지 않으면 자동으로 실행됩니다).

답변2

chmod실행 비트를 설정하려면 명령을 사용하십시오 .

chmod ugo+x auto_delete_backup_database.sh

관련 정보