我使用limux CentOS7运行备份脚本,该脚本将创建.tar文件,然后将文件发送到S3存储桶。
然而,当执行cornjob时,它只运行一半脚本并创建.tar文件,但不会将其上传到S3。
备份脚本;
TIME=`date +%b-%d-%y` # This Command will add date in Backup File Nam e.
FILENAME=backup-$TIME.tar.gz #define Backup file name format.
SRCDIR=/opt # Location of Important Data Directory (Source of backup).
DESDIR=/home/centos/backupfile # Destination of backup file.
tar -cvf $DESDIR/$FILENAME $SRCDIR
aws s3 cp /home/centos/backupfile/$FILENAME s3://backup/
cronjob是;
30 7 * * * /home/centos/backupfile/runbackup
当我通过运行./runbackup手动运行备份文件时,它工作正常并将文件发送到s3存储桶。
我已经检查了.tar文件的权限,这看起来很好,不太确定为什么它不会工作。我试过移动文件位置,更改cronjob设置但没有运气。
有什么想法吗?
答案 0 :(得分:1)
您是否尝试指定执行命令的用户?像这样:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
30 7 * * * root /home/centos/backupfile/runbackup
答案 1 :(得分:0)
我假设您的存储桶实际上并未命名为“备份”。
当您手动运行时,您在哪个用户下运行它?它是否与在cron下运行它的用户相同?此外,您是否也在寻找该用户的个人资料(source ~/.profile
或类似内容)?如果没有,您可能会遗漏一些脚本所需的环境变量,这些变量在您以交互方式运行时存在。另一件要检查的是你如何将凭据传递给S3?例如,当您手动运行它时,该用户是否具有AWS凭据和配置文件等,或者您是否正在使用IAM角色?
最后,确保脚本中可执行文件的路径有效;例如/usr/local/bin/aws
。
调试它的一种方法是将一堆日志记录语句写入文件,以便您可以检查更多内容。
答案 2 :(得分:0)
尝试在您的脚本开头将密钥设置为环境变量AWS_ACCESS_KEY_ID(您的AWS访问密钥)和AWS_SECRET_ACCESS_KEY(您的AWS密钥)。
答案 3 :(得分:0)
昨天在(smscstewart)的帮助下回答了这个问题。
我们添加了以下可以正常使用的行。
source $ HOME / .bash_profile / usr / local / bin / aws s3 cp / home / centos / backupfile / $ FILENAME s3:// backup /