【发布时间】:2017-11-02 16:42:23
【问题描述】:
我是 Shell 脚本的新手,正在编写一个脚本,该脚本将从我的数字海洋存储桶 (SPACES) 中删除旧项目
脚本在手动运行时工作,但在我使用 crontab 时出错 我也看到过其他类似的问题,但没有帮助
脚本:
#!/bin/bash
/usr/local/bin/s3cmd -c ~/Bucket_Name ls s3://$1 | while read -r line;
do
createDate=`echo $line|awk {'print $1" "$2'}`
createDate=`date -d"$createDate" +%s`
olderThan=`date -d"-$2" +%s`
#echo $line
#echo $createDate
#echo $olderThan
#echo $1
#echo $2
if [[ $createDate -lt $olderThan ]]
then
fileName=`echo $line|awk {'print $4'}`
#echo $fileName
if [[ $fileName != "" ]]
then
#printf 'FILE' $fileName
if [[ $fileName == *"sql" ]]
then
/usr/local/bin/s3cmd -c ~/Bucket_Name rm "$fileName"
fi
fi
fi
done;
手动命令(工作):
./sqlclear.sh "Bucket_Name" "300 minutes"
Crontab 命令:
* * * * * sh /sqldump/sqlclear.sh "Bucket_Name" "300 minutes" >> /var/log/sql-clear.log 2>&1
错误 Cron 日志(上面的 sql-clear.log):
/sqldump/sqlclear.sh: 13: /sqldump/sqlclear.sh: [[: not found
【问题讨论】:
-
在 cron 中使用
bash而不是sh。即sh /sqldump/sqlclear.sh到bash /sqldump/sqlclear.sh -
你在你的 cron 中使用了
sh,并且你有一个bash的shebang。 -
~/Bucket_Name- 这可能是你的问题。 Crontab 以 SU 而非您的用户身份运行脚本。尝试提供脚本内所有文件的完整路径。 -
@AlexM Cron 以您运行它的任何人身份运行...
-
@123 是的,这就是问题所在