이 스크립트가 cron에서는 작동하지 않지만 쉘에서 호출하면 작동하는 이유는 무엇입니까?

이 스크립트가 cron에서는 작동하지 않지만 쉘에서 호출하면 작동하는 이유는 무엇입니까?

내 셸에서 호출하면 다음 코드가 작동합니다.

#!/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에서 실행되지 않는 이유는 무엇입니까?

관련 정보