使用 s3cmd 在关机时将 httpd 日志文件保存到 S3

使用 s3cmd 在关机时将 httpd 日志文件保存到 S3

我在 Amazon Web Services (AWS) 上有一个自动扩展组。我想在组缩减时保留实例 (Amazon Linux AMI) 上的日志文件。我目前的想法是在实例重新启动或关闭时运行的脚本中使用 s3cmd 工具。该脚本 (sendlogtos3,位于 /etc/init.d 目录中) 从命令行运行良好。它也会在重新启动/关闭时执行(它将其消息记录在 /var/log/messages 文件中),但关键部分 s3cmd 命令未执行。重新启动时不会将 s3cmd 输出发送到消息文件,但从命令行运行时会发送。

这是脚本:

#!/bin/bash
PATH=$PATH:/usr/sbin:/opt/aws/bin

start(){
touch /var/lock/subsys/0sendlogtos3
}


stop() {

S3_BUCKET=<<bucket_name>>
EC2_INSTANCE_STRING="`ec2-metadata -i`"
LOG_FILE_LOCATION=/var/log/httpd/

s3_dest=s3://$S3_BUCKET/${EC2_INSTANCE_STRING:13}/
s3cmd --config /root/.s3cfg put -r $LOG_FILE_LOCATION  $s3_dest >> /var/log/messages  2>&1
wait
echo "`date`" - sendlogtos3 executed >> /var/log/messages
rm -f /var/lock/subsys/0sendlogtos3
}

case "$1" in
start)
start
;;
stop)
stop
;;
esac

########END#######

该文件在 rc0.d 和 rc6.d 文件夹中以 K000sendlogtos3 的形式链接(符号),在 rc3.d 文件夹中以 S99sendlogtos3 的形式链接。脚本的权限看起来正确(rwxr-xr-x)。我曾尝试明确说明配置文件的位置,并跟踪符号链接,但这些都没有任何效果。

我不明白为什么 s3cmd 没有运行。有人知道吗?或者如何找出问题所在?

答案1

它可能没有运行,因为它无法找到二进制文件。虽然没有任何错误日志,但这只是我的假设。

尝试调整s3cmd脚本中的部分以使用其完整路径。我不确定你是如何安装的s3cmd(通过 yum 或手动),但你可以通过运行来找到其完整路径which s3cmd

相关内容