hallo leute!
ich ich habe ein paar webseiten auf meinem server, bei denen ich gern die logfiles rollen und packen möchte. bisher mache ich das mt folgendem script:
#!/bin/bash #Dateien, die es zu sichern gilt LogDatei=(“error.log” “httpd.log”) #unterhalb dieses Pfades werden die logs gesichert Pfad=”/var/home/htdocs/” #Unterverzeichnis (hier mit datum) UV=`date -d now +%m%Y` #Apache stoppen: killall httpd killall httpd echo Apache stop #Dateien sichern: r=0 while [ -n “${LogDatei[$r]}” ]; do for i in `find $Pfad -name ${LogDatei[$r]}`; do test -e `dirname $i`/$UV || mkdir `dirname $i`/$UV mv $i `dirname $i`/$UV/`basename $i` done let r++ done #Apache starten: /usr/httpd/bin/apachectl start #Dateien packen: r=0 while [ -n “${LogDatei[$r]}” ]; do for i in `find $Pfad -path *$UV/${LogDatei[$r]}`; do echo $i bzip2 $i done let r++ done
1. das script stoppt den webserver und benennt die logdateien um.
2. startet den webserver und
3. packt dann die umbenannten dateien
die neuen logfiles werden dann beim start des apachen neu angelegt.
leider gibt’s ein problem: schritt 2 fällt aus. die dateien werden also prima umbenannt und gepackt, aber der webserver startet nicht. ich kann mir vorstellen, dass sich das script evtl. verschluckt, weil der webserver wieder gestartet wird, während es evtl. noch am umbenennen ist. oder?
woran könnte es liegen und wie kann ich den fehler beseitigen?
wäre für eure hilfe dankbar.
gruß, roger.
hi,
erstens:
killall httpd
killall httpd
wieso gibt es wohl start und STOP scripten? das würde ich mal durch ein /etc/init.d/apache stop ersetzen – den u.a. können ports noch blockiert werden und der apache so nicht mehr starten wenn du ihn einfach killst.
dies könnte u.a. dein problem lösen ;) desweiteren evtl. einfach einmal ein “sleep 5” einfügen vor dem erneutem starten.
zweitens (“wiso einfach wenn es auch umständlich geht” ;):
schau dir mal logrotate[1] an – das sollte genau das tun was du willst und ist eigentlich bei jeder guten distro mit dabei
fejf