我在Amazon Web Services(AWS)上有一个自动扩展组。 我想在组缩小时保留实例上的日志文件(Amazon Linux AMI)。 我目前的想法是在实例重新启动或closures时运行的脚本中使用s3cmd工具。 脚本(在/etc/init.d目录下的sendlogtos3)从命令行运行良好。 它也在重新启动/closures时执行(将其消息logging在/ 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#######
该文件作为K000sendlogtos3链接(符号)在rc0.d和rc6.d文件夹中,在rc3.d文件夹中作为S99sendlogtos3链接。 脚本的权限看起来正确(rwxr-xr-x)。 我已经试过明确指出configuration文件的位置,并遵循符号链接,但都没有任何效果。
我不明白为什么s3cmd没有运行。 有没有人有任何想法? 或者如何弄清楚这个问题?
它可能没有运行,因为它无法find二进制文件。 没有任何错误日志,这只是我正在做的一个假设。
尝试调整脚本中的s3cmd部分以使用其完整path。 我不知道你是如何安装s3cmd (通过yum或手动),但你可以通过运行which s3cmdfind它的完整path。