logrotate.d/rails で
/.../staging.log { weekly rotate 15 missingok notifempty copytruncate dateext compress lastaction aws s3 mv /.../staging.log*.gz s3://... endscript }
というログを圧縮してS3に転送する設定をかいたのですが圧縮までされるけど転送がされません
logrotate 中にでたエラーはどこに保存されるのでしょうか
疑わしいのは aws コマンドのアカウント設定がされていないのかなと思い
ps -ef | grep cron をすると cron コマンドは root で動いてるようなのですが
root になる権限をもっていません
ただ logrotate で作成されるログファイルの所有者は別のユーザになっていて
そのユーザになる権限はもっているので
aws s3 mv /.../staging.log*.gz s3://...
コマンドをたたくとちゃんと転送されます
roglotate の lastaction にかいたコマンドが cron からよばれた場合実行者は誰になるのでしょうか
またそれが root だった場合この aws コマンドだけ指定したユーザ権限で実行する
あるいは root 権限で指定ユーザの AWS アカウント情報 ~user/.aws/config を利用するにはどうすればいいのでしょうか
追記:
logrotate -d /etc/logrotate.d/rails
empty log files are not rotated, old logs are removed considering log /...../staging.log log does not need rotating not running last action script, since no logs will be rotated
となります
1行目にかかれているログファイルの中身は less すれば見えるので空ではないのですが
なぜか空扱いになってしまっているようです
ただ日曜日になると圧縮まではされてるはずなのでよくわかりません…
追記:
やはり圧縮まではされるのですがログが転送されません
lastaction 内に別のコマンドをかくと実行されます
lastaction 内のコマンドをはりつけると転送されます
コマンド内のパスは絶対パスでかいています
aws コマンドのアカウント情報をうまくみにいってくれていないとしか考えられないんですが…
logroteta から起動した場合に aws コマンドがうまく動く方法はないでしょうか
やりたいことは 1週間ごとにログを圧縮→S3へ転送だけなんですが
自分だけではこれ以上原因がわからないので
logrotate や AWS コマンド以外に
(Rails のログ機能内に圧縮とS3へ転送を行うコードを追加するとか)方法はないでしょうか
追記:
lastaction 内に
cp /.../staging.log*.gz /tmp/
というコマンドを追加したところコピーはされたのですが /tmp/ に生成されたファイル所持者は root になっています
log ディレクトリに生成される圧縮ファイルはログイン権限のある別の <user> なのですが
lastaction 内のコマンドを
sudo -u <user> aws s3 mv /.../staging.log*.gz s3://...
と変更してみましたがやはり転送されません
<user> になって aws 以降のコマンドをうてば転送されます
sudo から全体をうっても転送されます
cron から lastaction にかいた aws コマンドだけがどうしても実行できません…
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。