logrotate
é usado pelo sistema para girar logs, portanto, você tem duas opções. Você pode incorporar a rotação desses logs de aplicativos nas rotações do sistema ou configurá-los e executá-los manualmente ou a partir do crontab do usuário root (Assumindo que o aplicativo Rails seja executado como root, pois seu diretório é /root/...
).
Rotação do sistema
Para configurar um logrotation dentro dos pré-existentes do sistema, basta adicionar um novo arquivo ao diretório /etc/logrotate.d
. Chame de railsapp.conf
. Eu usaria os outros exemplos para construí-lo. Também confrere com a página logrotate
man.
Rotação do usuário
Se você deseja executar sua própria instância de logrotate
, só é necessário fornecer as opções de linha de comando para fazê-lo.
- Primeiro, faça uma cópia de
/etc/logrotate.conf
/root/rails_logrotate.conf
- Edite o arquivo para que ele tenha a rotação de log configurada da maneira desejada (por exemplo, mantenha todos os logs, gire semanalmente, etc.)
-
Execute
# 1st time $ logrotate -d -f -s $HOME/my_logrotate.state logrotate.conf # afterwards $ logrotate -d -s $HOME/my_logrotate.state logrotate.conf
Se as coisas estiverem corretas, você poderá executar novamente esses comandos sem a opção
-d
. Isso é apenas para fins de depuração e não executará nenhuma das tarefas, apenas mostrará o que ela faria.$ logrotate -s $HOME/my_logrotate.state logrotate.conf
Você também pode usar a opção
-v
para torná-la detalhada, semelhante à saída vista ao usar a opção-d
.
Exemplo
-
Comece com este arquivo de log.
$ dd if=/dev/zero of=afile bs=1k count=10k 10240+0 records in 10240+0 records out 10485760 bytes (10 MB) copied, 0.0702393 s, 149 MB/s $ ll afile -rw-rw-r-- 1 saml saml 10485760 Aug 6 14:37 afile $ touch -t 201307010101 afile $ ll afile -rw-rw-r-- 1 saml saml 10485760 Jul 1 01:01 afile
-
Agora execute
logrotate
$ logrotate -v -f -s $HOME/my_logrotate.state logrotate.conf reading config file logrotate.conf reading config info for /home/saml/afile Handling 1 logs rotating pattern: /home/saml/afile forced from command line (1 rotations) empty log files are rotated, old logs are removed considering log /home/saml/afile log needs rotating rotating log /home/saml/afile, log->rotateCount is 1 dateext suffix '-20130806' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding old rotated logs failed renaming /home/saml/afile to /home/saml/afile-20130806 creating new /home/saml/afile mode = 0664 uid = 500 gid = 501
-
Verifique os resultados
$ ll afile* -rw-rw-r-- 1 saml saml 0 Aug 6 14:40 afile -rw-rw-r-- 1 saml saml 10485760 Jul 1 01:01 afile-20130806
Cron semanal
Para que isso seja executado todo domingo, você pode criar a seguinte entrada crontab para o usuário root.
$ crontab -e
Adicione as seguintes linhas:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 0 * * sun logrotate -v -f -s $HOME/my_logrotate.state $HOME/logrotate.conf
Em seguida, salve os itens acima.
Você também pode usar esses tipos de atalhos em vez de especificar os dias, minúsculos, segundos, etc.
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".