Ubuntu 9.10 cron脚本“ec2-consistent-snapshot”无法执行和访问文件

我有一个在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。