【问题标题】:Script working manually but not via crontab脚本手动工作,但不通过 crontab
【发布时间】: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.shbash /sqldump/sqlclear.sh
  • 你在你的 cron 中使用了sh,并且你有一个bash 的shebang。
  • ~/Bucket_Name - 这可能是你的问题。 Crontab 以 SU 而非您的用户身份运行脚本。尝试提供脚本内所有文件的完整路径。
  • @AlexM Cron 以您运行它的任何人身份运行...
  • @123 是的,这就是问题所在

标签: linux bash shell cron


【解决方案1】:

我在 crontab 中运行时错过了 Bash 所以 crontab 应该是

* * * * * bash /sqldump/sqlclear.sh

【讨论】:

  • 你可以完全跳过bash,没必要。 /sqldump/sqlclear.sh 就够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2017-08-05
  • 2017-10-27
  • 2017-01-13
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
相关资源
最近更新 更多