Ich möchte gerne die Logfiles, die durch nginx (access.log, error.log)
und rails (production.log) generiert werden täglich wegschieben und
neuschreiben lassen.
Dafür habe ich folgendes Skript geschrieben, welches täglich durch cron
ausgeführt wird:
1 | #!/usr/bin/env ruby
|
2 |
|
3 | require 'fileutils'
|
4 | require 'date'
|
5 | include FileUtils
|
6 |
|
7 | cd '/var/backup'
|
8 | mkdir_p 'mein_projekt'
|
9 | cd 'mein_projekt'
|
10 |
|
11 | date_dir = Date.today.strftime( "%Y/%m/%d" )
|
12 | mkdir_p date_dir
|
13 | cd date_dir
|
14 |
|
15 | cp '/var/www/mein_projekt/shared/log/production.log', '.'
|
16 | File.truncate( '/var/www/mein_projekt/shared/log/production.log', 0 )
|
17 |
|
18 | cp '/var/log/www/mein_projekt/access.log', '.'
|
19 | File.truncate( '/var/log/www/mein_projekt/access.log', 0 )
|
20 |
|
21 | cp '/var/log/www/mein_projekt/error.log', '.'
|
22 | File.truncate( '/var/log/www/mein_projekt/error.log', 0 )
|
23 |
|
24 | %x( kill -USR1 $( cat /run/nginx.pid ) )
|
25 | touch '/var/www/mein_projekt/current/tmp/restart.txt'
|
26 | chown 'mein_deploy_user', 'mein_deploy_user', '/var/www/mein_projekt/current/tmp/restart.txt'
|
Ziel ist es, dies möglichst unterbrechungsfrei zu machen.
Das Skript wird als root ausgeführt, um die Berechtigungen der Dateien
beizubehalten kopiere und truncate ich die Dateien.
Nachdem das gemacht wurde starte ich die Prozesse neu damit die logfiles
neu aufgemacht werden und nach dem truncaten nicht bei der alten Größe
weitermachen.
Ist dies das korrekte Vorgehen?