为保证服务器磁盘存储空间足够,我们在执行备份任务时通常都会将几天前的文件进行清理,因此在本分文件里通常会写下如下代码:
#删除2天前的文件
find /usr/aws/prd_project_backup -name "*.tar.gz" -mtime +1 -exec rm -rfv {} \;
在定时任务执行后,发现该删除命令并未执行。
起初怀疑是crontab定时任务未窒执行,通过sudo cat /var/log/cron命令查看crontab执行日志
sudo cat /var/log/cron
发现定时任务的确对脚本进行执行。
后考虑sh脚本中的命令执行有误,因此手动对脚本进行了执行:
bash backup.sh
发现脚本也能执行成功,说明sh脚本中的删除文件命令正常。
说明问题出在crontab对sh文件的执行上,此时我开始怀疑是文件权限问题。
后发现,该sh文件的权限是-rw-r--r--,发现除拥有者有独写权限,其他用户都是读权限,也没有执行权限。
此时通过chmod命令,对文件进行权限修改:
#7 代表所有者权限,即读(4)+ 写(2)+ 执行(1)= 7
#5 代表组和其他用户权限,即读(4)+ 执行(1)= 5
chmod 755 backup.sh
再次执行crontab定时任务后,sh脚本正常执行。