![Logrotate 脚本未上传到 s3](https://linux22.com/image/663965/Logrotate%20%E8%84%9A%E6%9C%AC%E6%9C%AA%E4%B8%8A%E4%BC%A0%E5%88%B0%20s3.png)
我尝试每天使用 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/
答案1
我认为最有可能的是,要么rvmsudo
需要s3cmd
额外的环境变量才能成功运行,这些变量未在 logrotate 上下文中设置,但可以在交互式 shell 会话中设置。如果cron 设置的rvmsudo
限制中没有这些变量,我不会感到惊讶PATH
。
答案2
如果您正在运行 EC2 服务器除了运行单独的 bash 脚本之外,还可以向 EC2 服务器添加实例配置文件,以便aws s3 rsync不需要在 cron job 下无法分配的访问密钥。
因此,如果在正在运行的 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
}