
私は実行中のデーモン(Webサービス)のログを回転させるためにログ回転を使用しています。ログの回転は次のとおりです。
/var/log/deamon/error.log {
daily
rotate 20
compress
delaycompress
missingok
notifempty
create 644 uwsgi uwsgi
postrotate
/etc/init.d/deamon stop
/etc/init.d/deamon start
endscript
}
うまくいきます/etc/init.d/deamon stop
が、バックアップは開始されません。 2つの問題の1つがあります。権限拒否エラーが発生します(おそらく停止したために発生しなかった可能性があります)。または、先頭が失敗します。権限の問題でUID、GIDを設定し、rootとしてサービスを開始する必要があります。権限を設定しても、-rwxrwxrwx
次のエラーが発生します。unable to set gid to 1001 (Operation not permitted)
私の質問は、logrotateを別のユーザー(rootなど)で実行するように設定するか、回転を許可してgidを設定する方法です。
これは私の/etc/init.d/deamonです
#!/bin/bash
daemon=/venv/deamon_django18/bin/uwsgi
pid=/var/run/uwsgi/deamon.pid
args="--ini /etc/uwsgi/deamon.ini --pidfile $pid"
case "$1" in
start)
echo "Starting uwsgi"
start-stop-daemon -u uwsgi -g uwsgi -p $pid --start --exec $daemon -- $args
;;
stop)
echo "Stopping script uwsgi"
start-stop-daemon --signal INT -u uwsgi -g uwsgi -p $pid --stop $daemon -- $args
;;
reload)
echo "Reloading conf"
kill -HUP $(cat $pid)
;;
*)
echo "Usage: /etc/init.d/uwsgi {start|stop|reload}"
exit 1
;;
esac
exit 0
答え1
logrotateで他のユーザーを使用するには、「su」オプションを指定できます。
/home/ubuntu/log/*.log {
su ubuntu ubuntu
rotate 5
daily
compress
missingok
}
答え2
同様の問題を抱えている人がいれば解決しました。問題は、デーモンが十分に早く終了しなかったことです。start
logrotateファイルから呼び出されると、プログラムはまだ技術的に実行されています。 init.dファイルにsleepを追加し、reloadを再構築してstopを呼び出し、startを呼び出して問題を解決しました。最終的な解決策は次のとおりです。
...
reload)
/etc/init.d/daemon stop
sleep 2
/etc/init.d/daemon start
;;
*)
...
そして対数回転:
...
postrotate
/etc/init.d/daemon reload
endscript
...