Я пытаюсь использовать logrotate для загрузки файлов журнала от моих направляющих и команд nginx один раз в день. Когда я выполняю команду logrotate вручную, файлы успешно загружают, но она никогда не делает это самостоятельно. Я попытался использовать lastaction и также поствращаюсь, но ни один на самом деле не загружает на 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.