Logging
Logrotate 腳本未上傳到 s3
我正在嘗試使用 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 腳本,而是呼叫一個 shell 腳本。
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 的上下文中設置的,而是在您的互動式 shell 會話中。如果在限制性which cron 設置rvmsudo
中不可用,我不會感到驚訝。PATH
如果您正在執行 EC2 伺服器,除了執行單獨的 bash 腳本之外,還可以將實例配置文件添加到 EC2 伺服器,以便aws s3 rsync不需要無法在 cron 作業下分配的訪問密鑰。
因此,如果在執行的 EC2 伺服器上添加了實例配置文件,則以下 logrotate 配置執行良好
/home/ubuntu//logs/*.log { copytruncate daily dateext rotate 30 compress missingok su root root lastaction HOSTNAME=$(/bin/hostname -f) DD=$(/bin/date +%d) MM=$(/bin/date +%m) YYYY=$(/bin/date +%Y) BUCKET="s3://xxx-logs-archive/$YYYY/$MM/$DD/batch/$HOSTNAME/" FILE="/home/ubuntu/logs/batch.log-$YYYY$MM$DD.gz" /usr/local/bin/aws s3 cp "$FILE" "$BUCKET" endscript }