Назад | Перейти на главную страницу

Сохранение файлов журнала httpd в S3 при завершении работы с помощью s3cmd

У меня есть группа автоматического масштабирования на 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. У кого-нибудь есть идеи? Или как разобраться в проблеме?

Вероятно, он не работает, потому что не может найти двоичный файл. Однако без журнала ошибок это всего лишь предположение, которое я делаю.

Попробуйте отрегулировать s3cmd часть вашего скрипта, чтобы использовать его полный путь. Я не уверен, как вы установили s3cmd (либо через yum, либо вручную), но вы можете узнать его полный путь, запустив which s3cmd.