我在 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
。