PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Archivierungsscript für Log_Files !!!



21-01-2001, 13:41
hallo,

ich habe dieses kleine script geschrieben um , log_files zu archivieren/packen.. es funktioniert leider nicht. Ich habe keinen plan wieso !kann mir jemand weiterhelfen, der vielleicht schon mit solchen scripts arbeitet ?

#!/bin/sh
OLD_ACCESS_LOG=/pfad/logs/old/access_log. `date +%y%m%d-%H%M%S`
OLD_ERROR_LOG=/pfad/logs/old/error_log. `date +%y%m%d-%H%M%S`
mv /pfad/log/access_log. `echo $OLD_ACCESS_LOG`
mv /pfad/log/error_log. `echo $OLD_ERROR_LOG`
/bin/gzip $OLD_ACCESS_LOG
/bin/gzip $OLD_ERROR_LOG

thommy
22-01-2001, 08:25
Die Zeile

<pre>
mv /pfad/log/access_log. `echo $OLD_ACCESS_LOG`
</pre>

enthält meiner Meinung nach einen Fehler.
Ich nehme an, Du möchtest /pfad/log/access_log" verschieben, tatsächlich steht aber dahinter noch ein Punkt, sodass mv die Datei nicht findet (da es sie nicht gibt). Entferne den Punkt und es sollte klappen. Ach ja, die Kommandosubstitution bei dem mv-Aufrufen kannst Du Dir ersparen:

<pre>
mv /pfad/log/access_log $OLD_ACCESS_LOG
</pre>

Thomas

22-01-2001, 11:18
danke ! aber das ergebnis ist das gleiche :

./name: 010122-111514: command not found
./name: 010122-111514: command not found
mv: missing file argument
Try `mv --help' for more information.
mv: missing file argument
Try `mv --help' for more information.

und wenn ich -f oder -b mv hinzufüge ist auch keine änderung !

thommy
22-01-2001, 11:50
Hast Du die Kommandosubstitution entfernt? Sonst versucht die Bash, den Inhalt der Variablen auszuführen, was natürlich zu der Ausgabe "Command not found" führt!

Thomas

thommy
22-01-2001, 13:37
<pre>
mv /pfad/log/access_log $OLD_ACCESS_LOG`
mv /pfad/log/error_log $OLD_ERROR_LOG`
</pre>

Betrachte mal die letzten Zeichen auf den Zeilen. Dies bewirkt eine Kommandosubsitution!!! Entferne sie und es solle klappen.

Thomas

22-01-2001, 13:47
das war nur hier im beitrag ein druckfehler . im script sind die zeichen nicht vorhanden !

thommy
22-01-2001, 14:28
Setze an den Anfang des Scripts die Zeile
<pre>
set -x
</pre>

Damit wird jede Zeile nach der Expansion ausgegeben. Jetzt solltest Du erkennen, welche Zeile das Problem hervor ruft. Zum Debuggen in Shellskripten kannst Du auch mal in die Linuxfibel schauen, dort stehen zahlreiche Hinweise, wie man so einem Fehler auf die Schliche kommt.

Ich erkenne keinen Fehler im Skript; kann es aber leider auch nicht testen, da ich kein Linuxsystem bei der Hand habe.

Thomas

22-01-2001, 14:50
das ergebnis ist dann das :


++ date +%y%m%d-%H%M%S
+ OLD_ACCESS_LOG=/pfad/logs/old/access_log.
+ 010122-144747
./name: 010122-144747: command not found
++ date +%y%m%d-%H%M%S
+ OLD_ERROR_LOG=/pfad/logs/old/error_log.
+ 010122-144747
./name: 010122-144747: command not found
+ mv /pfad/log/access_log
mv: missing file argument
Try `mv --help' for more information.
+ mv /pfad/log/error_log
mv: missing file argument
Try `mv --help' for more information.
+ /bin/gzip
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
+ /bin/gzip
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h


der scheint ein problem mit dem datum zu haben. aber das soll doch kein befehl sein. vielleicht ist was am aufbau falsch.
ziel des scriptes solll es sein :
nachdem der cronjob webalizer alle neuen zugriffe aus access_log rausgeholt hat, soll er die access_log quasi löschen ins verzeichnis old verschieben, dann packen. und das mit dem datum am ende !

thommy
22-01-2001, 15:50
Alles klar, Du hast ein Leerzeichen zwischen Dateinamen und der Kommandosubstitution:

<pre>
OLD_ACCESS_LOG=/pfad/logs/old/access_log.LEERZEICHEN`date +%y%m%d-%H%M%S`
</pre>

=&gt; Entfernen!!!!!!!!!!!!!!!

Thomas

22-01-2001, 16:02
DANKE !!! es läuft !!!

nur noch eine kleine frage muss ich da eine neue access_log und error_log reinkopieren oder legt apache selber eine an sobald jemand drauf zugreift ?

23-01-2001, 00:42
Kommandosubstitution ? ich hab nichts entfernt ! ich vertstehe die frage nicht ganz !

#!/bin/sh
OLD_ACCESS_LOG=/pfad/logs/old/access_log. `date +%y%m%d-%H%M%S`
OLD_ERROR_LOG=/pfad/logs/old/error_log. `date +%y%m%d-%H%M%S`
mv /pfad/log/access_log $OLD_ACCESS_LOG`
mv /pfad/log/error_log $OLD_ERROR_LOG`
/bin/gzip $OLD_ACCESS_LOG
/bin/gzip $OLD_ERROR_LOG

das ist das script.

thommy
23-01-2001, 07:46
Keine Ahnung;(
Musst es eben austesten.

Thomas

netzmeister
23-01-2001, 09:01
Hallo,

Du mußt eine neue access_log anlegen. (Und error_log)

Von selber macht der apache das nicht. Wenn er keine Log dateien findet hängt er auch beim Neustart!

Eicke



[Dieser Beitrag wurde von netzmeister am 23. Januar 2001 editiert.]