내 셸에서 호출하면 다음 코드가 작동합니다.
#!/usr/bin/bash
how_many=$(find /home/jerzy/pCloudDrive -type d -iname "CS202*"|wc -l)
#/usr/bin/echo ${how_many} >>/home/jerzy/to.be.removed #This works
if [[ $how_many == 1 ]]; then
exit 0
#echo "There is only one backup of CS. Cannot delete."
elif [[ $how_many == 2 ]]; then
exit 0
#echo "There are only two backups of CS. Cannot delete."
else
#echo "Let us delete"
to_be_removed=$(ls -tr CS202*|grep -m 1 CS202|sed s/://)
/usr/bin/echo "${to_be_removed}" >>/home/jerzy/to.be.removed #empty file is created from cron
/usr/bin/echo "$(ls -tr CS202*|grep -m 1 CS202|sed s/://)" >>/home/jerzy/to.be.removed #empty file is created from cron
#/usr/bin/echo ${to_be_removed} >>/home/jerzy/to.be.removed #empty file is created from cron
#/usr/bin/echo \$\{to_be_removed\} >>/home/jerzy/to.be.removed #"${to_be_removed}" appended from cron
/usr/bin/echo "${to_be_removed}" #when the script is run from my shell it echoes the target directory
/usr/bin/rm -r ${to_be_removed} #works from the shell, not from cron
#/usr/bin/rm -r $(ls -tr CS202*|grep -m 1 CS202|sed s/://) ##works from the shell, not from cron
#/usr/bin/rm -r "${to_be_removed}"
fi
이 스크립트는 다음 중 하나와 유사한 이름을 가진 가장 오래된 디렉터리를 삭제하도록 설계되었습니다.
CS20210730_1341
CS20210730_2350
CS20210731_2350
CS202*
rsync는 백업을 위해 매일 새로운 백업을 생성하기 때문에 이 작업은 하루에 한 번 수행됩니다 . 스크립트에 배치된 줄은 echo
디버깅을 위한 것입니다. 코드 요구아니요 sudo
지정된 디렉터리를 삭제합니다. cron
내 사용자의 crontab 내에서는 작동 하지 않습니다 jerzy
. 동일한 사용자의 셸에서 실행하면 작업이 수행됩니다. 이유는 무엇입니까?
내 cron의 환경 변수:
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/home/jerzy/.cargo/bin
SHELL=/bin/bash
지금까지 나는 다음과 같이 진단했습니다.
rm
/usr/bin/rm -r /home/jerzy//pCloudDrive/CS20210730_1341
스크립팅하는 동안 대상을 삭제하는 것처럼 cron에서 작동합니다 . 이는 권한 문제가 아닙니다.- 파일 생성에서 알 수 있듯이 스크립트 실행이 시작됩니다
/home/jerzy/to.be.removed
.
이 스크립트가 cron에서 실행되지 않는 이유는 무엇입니까?