내가 할 때 완벽하게 실행되는 매우 간단한 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
동일한 행을 실행 하고 추가하십시오. 이렇게 하면 권한이 있는 사용자로 작업을 실행할 필요가 없으며(파일도 자동으로 삭제됨) 스크립트가 시작된 작업 위치에 있게 됩니다.