Я пытаюсь использовать logrotate для загрузки файлов журнала с моих команд rails и nginx один раз в день. Когда я запускаю команду logrotate вручную, файлы загружаются успешно, но сама по себе этого никогда не происходит. Я пробовал использовать lastaction, а также postrotate, но на самом деле ни одна из них не загружается в S3. Что-то мне не хватает?
/home/deploy/www/mysite.com/log/*log {
su
daily
dateext
dateformat _%Y_%m_%d
rotate 3
missingok
dateext
compress
delaycompress
notifempty
copytruncate
sharedscripts
lastaction
rvmsudo passenger-config reopen-logs;
/usr/bin/s3cmd sync /home/deploy/www/mysite.com/log/*.gz s3://mysite_com/logs/rails/
endscript
}
РЕДАКТИРОВАТЬ: Ниже приведен исправленный способ сделать это. Поэтому вместо использования сценария lastaction вызовите сценарий оболочки.
lastaction
./rails_reload_and_upload.sh
endscript
который содержит
#/bin/bash
./reload_rails_logs.sh
/usr/bin/s3cmd --config /home/username/.s3cfg sync /home/deploy/www/mysite.com/log/*.gz s3://mysite_com/logs/rails/
Я бы сказал, что, скорее всего, либо rvmsudo
или s3cmd
Для успешного выполнения требуются дополнительные переменные среды, которые не установлены в контексте logrotate, но находятся в вашем интерактивном сеансе оболочки. Я не удивлюсь, если rvmsudo
недоступно в ограничительном PATH
который устанавливает cron.