cron에 의해 실행되지 않는 bash 스크립트

cron에 의해 실행되지 않는 bash 스크립트

내가 할 때 완벽하게 실행되는 매우 간단한 bash 스크립트가 있습니다.

./removeOldBackup.sh

또는

sh /home/myusername/backup/removeOldBackup.sh

하지만 crontab에 추가하면

* * * * * sh /home/myusername/backup/removeOldBackup.sh

또는

* * * * * /bin/sh /home/myusername/backup/removeOldBackup.sh

결코 작동하지 않습니다 ...

이것은 내 스크립트입니다.

#!/bin/sh

find . -name 'files_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'files_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

find . -name 'database_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'database_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

내 스크립트 권한은 다음과 같습니다.

-rwxr-xr-x 1 root root 295 Jul 25 10:07 /home/myusername/backup/removeOldBackup.sh

루트 사용자를 위한 crontab이 추가되었습니다.

이것이 내가 찾은 것입니다 /var/log/syslog:

Jul 25 10:11:01 myservername /USR/SBIN/CRON[7583]: (root) CMD (sh /home/myusername/backup/removeOldBackup.sh)

따라서 스크립트를 수동으로 실행하면 백업 파일이 올바르게 삭제됩니다. cron으로 실행하면 삭제되지 않습니다. 저는 debian-6.0-x86_64를 사용하고 있습니다.

답변1

누군가가 댓글에서 말한 내용을 공식화하고 확장하기 위해 루트의 crontab에 무언가를 넣으면 /root스크립트가 있는 디렉토리가 아닌 내부적으로 실행됩니다. cron위치도 알 수 없기 때문입니다. 백업 파일이 해당 디렉터리 트리에 없기 때문에 find명령은 해당 파일에 도달하지 않습니다. 따라서 작업이 실행 중이지만 삭제할 파일을 찾을 수 없습니다. 절대 경로를 제공 find하거나 먼저 추가하면 cd /home/myusername/backup문제가 해결됩니다.

그럼에도 불구하고 이 cronjob을 루트로 실행할 필요는 전혀 없는 것 같습니다. 모든 파일은 myusername의 홈 디렉터리에 있으며 아마도 해당 파일의 소유일 수도 있습니다. cronjob을 사용자의 crontab에 넣는 것은 어떻습니까? 루트 버전에서 사용되는 crontab -e것과 myusername동일한 행을 실행 하고 추가하십시오. 이렇게 하면 권한이 있는 사용자로 작업을 실행할 필요가 없으며(파일도 자동으로 삭제됨) 스크립트가 시작된 작업 위치에 있게 됩니다.

관련 정보