저는 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