【问题标题】:Why aws cli command has no effect while calling from cron?为什么从 cron 调用时 aws cli 命令不起作用?
【发布时间】:2018-07-07 01:19:52
【问题描述】:

这是我的 cron 任务列表:

root@b03fbed2b08d:~# crontab -l
*/3 * * * * S3_BACKUPS_BUCKET=rake-backups /root/dump_psql.sh > /root/logs/cron-2018-01-28T02:24.log

dump_psql.sh 的内容

#!/bin/sh

BACKUP_PATH="/root/backups"
S3_URL="s3://${S3_BACKUPS_BUCKET}"

echo "$(date) Dumping ${POSTGRES_DB} database"
DB_NAME=rake
USER=dbroot
pg_dump -w -c -U $POSTGRES_USER $POSTGRES_DB > "${BACKUP_PATH}/$(date '+%Y-%m-%dT%H:%M').sql"
echo "$(date) Database dump created"

echo "$(date) Syncing ${BACKUP_PATH} folder with ${S3_URL} as $(whoami)"
/usr/local/bin/aws s3 sync $BACKUP_PATH $S3_URL
echo "$(date) Syncing completed"

当我手动调用此脚本时,它工作正常并提供以下输出:

Sun Jan 28 02:51:46 UTC 2018 Dumping rake database
Sun Jan 28 02:51:47 UTC 2018 Database dump created
Sun Jan 28 02:51:47 UTC 2018 Syncing /root/backups folder with s3://rake-backups as root
upload: backups/2018-01-28T02:48.sql to s3://rake-backups/2018-01-28T02:48.sql
upload: backups/2018-01-28T02:51.sql to s3://rake-backups/2018-01-28T02:51.sql
Sun Jan 28 02:51:48 UTC 2018 Syncing completed

但 cron 作业输出如下所示:

Sun Jan 28 02:48:01 UTC 2018 Dumping  database
Sun Jan 28 02:48:01 UTC 2018 Database dump created
Sun Jan 28 02:48:01 UTC 2018 Syncing /root/backups folder with s3://rake-backups as root
Sun Jan 28 02:48:05 UTC 2018 Syncing completed

例如 aws sync 没有任何输出(环境变量已到位)并且脚本无效 - 备份不在存储桶中。我哪里错了?

【问题讨论】:

  • 你看tag wiki的调试帮助了吗?貌似执行cron命令的环境不一样,不知道S3_BACKUPS_BUCKET
  • 但它会打印出Syncing /root/backups folder with s3://rake-backups as root这一行
  • 对不起,我的意思是POSTGRES_DB。第一个输出行,“Dumping database”,那里有一个空白。

标签: amazon-web-services amazon-s3 cron


【解决方案1】:

您没有检查您的命令是否失败。您没有检查错误。您也没有将错误输出发送到您的日志文件。

本文档描述了 AWS 命令​​的返回值:

AWS CLI Return Codes

修改您的两个命令以检查是否失败。注意 pg_dump 输出的变化以及将错误输出发送到标准输出的添加。

pg_dump -w -c -U $POSTGRES_USER $POSTGRES_DB -f "${BACKUP_PATH}/$(date '+%Y-%m-%dT%H:%M').sql" 2>&1

if [ $? -eq 0 ]
then
    echo "$(date) Database dump created"
else
    echo "$(date) Database dump FAILED"
fi

/usr/local/bin/aws s3 sync $BACKUP_PATH $S3_URL 2>&1
if [ $? -eq 0 ]
then
    echo "$(date) Syncing completed"
else
    echo "$(date) Syncing FAILED"
fi

现在再次查看日志文件中的错误消息并确定哪个命令失败。

【讨论】:

    【解决方案2】:
    i also tried running this from cron its not working but if i manually run it the output is successfully generated`enter code here`
    
     #!/bin/sh  
    /bin/rm -rf /home/user/data.txt
    HOME=/home/user/
    HOME="/home/user/"
    #source /home/user/sc.sh
    export AWS_CONFIG_FILE="/root/.aws/config"
    export AWS_ACCESS_KEY_ID=sbc
    export AWS_SECRET_ACCESS_KEY=sbc
    #export AWS_ACCESS_KEY=sbc
    export AWS_SECRET_KEY=sbc
    export AWS_DEFAULT_REGION=us-east-1
    #####################################################################
    
    STARTTIME=$(/bin/date --date='-59 seconds' +"%Y-%m-%dT%H:%M:%S")
    ENDTIME=$(/bin/date +"%Y-%m-%dT%H:%M:%S")
    /bin/echo $STARTTIME 
    /bin/echo $ENDTIME  
    aws --version 
    ###################################################################################
    
    /bin/echo "Memory/RAM Usage of Production Database :" > /home/user/filename.txt 
    
    T=$(aws cloudwatch get-metric-statistics --namespace AWS/RDS --metric-name FreeableMemory --dimensions Name=DBInstanceIdentifier,Value=NAMEOFDB --statistics Maximum --start-time "$STARTTIME" --end-time "$ENDTIME" --period 360)
    /bin/echo $T 
    
    TS=$(aws cloudwatch get-metric-statistics --namespace AWS/RDS --metric-name FreeableMemory --dimensions Name=DBInstanceIdentifier,Value=NAMEOFDB --statistics Maximum --start-time "$STARTTIME" --end-time "$ENDTIME" --period 360|/bin/grep Timestamp) >> /home/user/filename.txt
    /bin/echo $TS
    
    STARTTIME=$(/bin/date --date='-59 seconds' +"%Y-%m-%dT%H:%M:%S")
    ENDTIME=$(/bin/date +"%Y-%m-%dT%H:%M:%S")
    
    FREEM=$(aws cloudwatch get-metric-statistics --namespace AWS/RDS --metric-name FreeableMemory --dimensions Name=DBInstanceIdentifier,Value=NAMEOFDB --statistics Maximum --start-time "$STARTTIME" --end-time "$ENDTIME" --period 360|/bin/grep Maximum|/bin/cut -d: -f 2|/usr/bin/tr -d ','|cut -d. -f 1 ) >> /home/user/filename.txt
    
    
    FREEMG=$((FREEM/1073741824))
    /bin/echo "Memory Utilization = $FREEMG GB /244GB " >> /home/user/filename.txt
    
    
    ###################################################################################################################################################################################
    STARTTIME=$(/bin/date --date='-59 seconds' +"%Y-%m-%dT%H:%M:%S")
    ENDTIME=$(/bin/date +"%Y-%m-%dT%H:%M:%S")
    /bin/echo ""
    /bin/echo " Storage Utilization of DriverConnect Production Database Server :" >> /home/user/filename.txt
    
    #echo ""
    # Timestamp
    TS=$(aws cloudwatch get-metric-statistics --namespace AWS/RDS --metric-name FreeStorageSpace --dimensions Name=DBInstanceIdentifier,Value=NAMEOFDB --statistics Maximum --start-time "$STARTTIME" --end-time "$ENDTIME" --period 360|/bin/grep Timestamp)
    /bin/echo $TS  >> /home/user/filename.txt
    
    
    STARTTIME=$(/bin/date --date='-59 seconds' +"%Y-%m-%dT%H:%M:%S")
    ENDTIME=$(/bin/date +"%Y-%m-%dT%H:%M:%S")
    
    # storage utilization in GB
    
    FREEM=$(aws cloudwatch get-metric-statistics --namespace AWS/RDS --metric-name FreeStorageSpace --dimensions Name=DBInstanceIdentifier,Value=NAMEOFDB --statistics Maximum --start-time "$STARTTIME" --end-time "$ENDTIME" --period 360|grep Maximum|/bin/cut -d: -f 2 | /usr/bin/tr -d ','|/bin/cut -d. -f 1 ) >> /home/user/filename.txt
    #echo " Occupied Storage of Driverconnect Production Database : " >> /home/user/filename.txt
    FREEMG=$((FREEM/1073741824)) 
    /bin/echo " Available Storage = $FREEMG Gb/200 Gb" >> /home/user/filename.txt
    
    /bin/echo "################################################################################################################################################################################################"
    /bin/echo "################################################################################################################################################################################################"
    /bin/echo "################################################################################################################################################################################################"
    /bin/echo "################################################################################################################################################################################################"
    /bin/echo "################################################################################################################################################################################################"
    /bin/echo "################################################################################################################################################################################################"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-08
      • 2019-12-04
      • 2016-11-12
      • 2019-12-11
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      相关资源
      最近更新 更多