我有一个在Amazon EC2上运行的Ubuntu 9.10镜像,我已经build立了一个备份脚本ec2-consisten-snapshot。
我能够从SSH运行脚本,一切都很好用。
sudo ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-xxxxxxx >>/mnt/backup.log 2>&1
但是,当我在sudo crontab -e中安排一个cron作业时,脚本会运行但是会给我带来错误。
12 18 4 2 * ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-xxxxxxx >>/mnt/backup.log 2>&1
ec2-consistent-snapshot:错误:无法在/ usr / bin / ec2-consistent-snapshot第76行findAWS访问密钥或秘密访问密钥。xfs_freeze:无法解冻安装在/ vol上的文件系统:无效参数ec2-consistent-snapshot :错误:xfs_freeze -u / vol:失败(256)
AWS访问密钥位于$ HOME / .awssecret下,如果您不从cron运行它,它将正常工作
有人可以指出我需要做什么,我一直在试图弄清楚这个过去一周。 另外如何解决从命令行工作正常的xfs_freeze。
非常感谢你!
sudo crontab -e编辑root的crontab对吗? 当你说你有$ HOME / .awssecret,什么是$ HOME? 根的家还是你的?
您可能想要考虑使用/etc/cron.d,您可以额外添加用户的名称以执行脚本,如在这些文件中(例如,谨慎:脚本的语法略有不同)
编辑(在评论中回答你的问题):
创build一个文件/etc/cron.d/myEc2Crontab
使其包含:
SHELL=/bin/sh PATH=whatever you need as your path 12 18 4 2 * root ec2-consistent-snapshot --mysql --xfs-filesystem /vol vol-xxxxxxx >>/mnt/backup.log 2>&1
在你的命令之前,注意在时间说明之后添加的“根”。 这指定了运行命令的用户。
McLovin:我是ec2-consistent-snapshot的主要作者。 如果您将.awssecret复制到/root/.awssecret,它应该按照您的要求运行。 如果您查看联机帮助页,还有许多其他方法可以传入访问密钥ID和秘密访问密钥。
由于之前的错误,xfs_freeze错误才会发生。 如果您尝试解冻尚未冻结的文件系统,则此软件的最新版本会出现错误。 您可以忽略该错误,但是修复此类行为的修补程序已在审核中。
我会在这里添加有用的链接到各种资源,但serverfault不够信任我:)
根据它的configuration,sudo在运行时不会重置所有的环境variables。 例如,当我在Ubuntu 9.10 $ HOME的sudo仍然指向我的用户的主目录,而不是根!
在脚本中,将$ HOMEreplace为.awssecret的完整path。