Atualmente, estamos atualizando do Ubuntu 12.04 LTS para 14.04 LTS em nossos servidores de aplicativos ruby on rails e percebemos que os arquivos de log não estão mais girando.
Nas duas máquinas, temos um arquivo de /var/app-name/config/logrotate
propriedade de nosso usuário unix, deployer
que contém um arquivo de logrotate válido da seguinte maneira:
/var/app-name/log/*.log {
daily
rotate 365
delaycompress
compress
dateext
dateformat -%Y%m%d
missingok
copytruncate
}
Isso é vinculado ao /etc/logrotate.d/
diretório comoapp-name
No nosso servidor Ubuntu 12.04, temos o logrotate 3.7.8, que roda muito bem. Ele entra no var/app-name/log/
diretório e gira todos os arquivos de log de saída
Mas no servidor Ubuntu 14.04, temos o logrotate 3.8.7, que não gira os arquivos de log para o nosso aplicativo.
Quando depuro isso via sudo logrotate -d -f /etc/logrotate/.conf
, recebo a seguinte saída:
Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).
Perseguindo isso no código, parece que essa alteração foi adicionada ao fluxo de versão 3.8.x: https://github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526
Se eu alterar a propriedade do arquivo com o link simbólico /var/app-name/config/logrotate
para root
, ele começará a funcionar novamente. Mas, como esse arquivo faz parte do meu aplicativo e criado pela estrutura de implantação capistrano que usamos neste estado, prefiro não precisar alterar sua propriedade, quando costumava funcionar bem.
Então, os arquivos de configuração com link simbólico são recomendados / suportados pelo logrotate?
E, nesse caso, a recusa de usar meu arquivo (de propriedade de deployer
), que está vinculado ao /etc/logrotate.d
diretório, deve ser visto como um bug?
Ou existe outra abordagem recomendada para a rotação de logs específica do aplicativo?
(também solicitado no StackExchange unix )
fonte
Respostas:
O problema é que um arquivo de configuração logrotate pode executar qualquer comando como root (usando prerotate / estrofes postrotate). Portanto, você efetivamente concederia
deployer
privilégios de root ao usuário, dando-lhe acesso de gravação aos arquivos/etc/logrotate.d/
. Então não, não é um bug.Se você confia no usuário do implementador, acho que você pode resolver o problema concedendo a ele direitos de copiar arquivos no sudo
/etc/logrotate.d/
. Supondo, é claro, que o usuário do implementador não seja o mesmo usuário em que o aplicativo Web está sendo executado.fonte
Percebo que estou atrasado para a festa, mas estava tendo um problema semelhante e pensei em compartilhar minha solução.
Meus problemas começaram quando
logrotate
não leram a configuração que eu havia escrito. Não queria implantar novas configurações em uma pasta pertencente à raiz, porque não queria que o usuário de implantação tivesse acesso raiz a nada .No começo, tentei executar
logrotate
como o usuário de implantação, mas ele reclamou de ter acesso ao arquivo de estado em/var/lib/logrotate/state
. Então eu li a página de manual. Você pode especificar o arquivo de estado quelogrotate
usa! Portanto, pareceu-me uma solução melhor configurar um cron diário para executarlogrotate
como o usuário de implantação com um arquivo de estado personalizado. Dessa forma, nenhum acesso root é necessário pelo usuário de implantação ou pelo aplicativo.Veja como você especifica o arquivo de estado:
Agora você pode executar o logrotate como qualquer usuário e proprietário de configuração que desejar!
fonte