pepre
Supporter
Anmeldungsdatum: 31. Oktober 2005
Beiträge: 6474
Wohnort: Erlangen
|
Hallo, ist ezz zwar nicht Ubuntu-spezifisch, vllt kann aber trotzdem jemand helfen. "neli" zeigt den Unterschied des Inhaltes der Directories an (neue Files werden aufgelistet).
neli() # new-list
{
DIR=/home/ftp/public
NEW=$DIR/neu.txt
MDL=$DIR/.media-list
LST=$MDL/$(date -I).list
if [ ! -d $MDL ] ; then mkdir $MDL ; fi
cd $DIR/musik ; ls -1 > $LST # erstelle neue Liste
cd $DIR/film ; ls -1 >> $LST # dto
cd $MDL
TMP=$(ls -1 | head -n 1) # filname älteste Liste
diff -a $TMP $LST | grep "^>" | tr -d "^> " > $NEW
find . -ctime +7 -exec rm {} \; # lösche alle Listen älter als eine Woche
chown root:nogroup $NEW
} Das "diff" erzeugt, wenn es als cronjob läuft, eine Menge flascher Ausgaben - aber auch nicht immer. Rufe ich es direkt aus der bash auf, funktioniert alles wunderbar. Vor "neli" läuft noch eine Sortier- und Format-Routine drüber, aber die wird grosszügig mit "&& sleep 60" abgeschlossen; an Inkonsistenzen des FS kann es also nicht liegen. Welchen peinlichen Fehler mache ich in dem Script?
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4694
Wohnort: Berlin
|
Bei der Zuweisung an TMP ist das ls -l verdächtig. Sicher das Du das nicht ohne die Option machen willst!?
|
Fredo
Anmeldungsdatum: 27. Juni 2005
Beiträge: 5244
Wohnort: Bochum
|
Marc 'BlackJack' Rintsch hat geschrieben: Bei der Zuweisung an TMP ist das ls -l verdächtig. Sicher das Du das nicht ohne die Option machen willst!?
Das ist ein "-1", denke ich. Um nur eine Datei pro Zeile aufzulisten. Gruß Fredo
|
pepre
Supporter
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2005
Beiträge: 6474
Wohnort: Erlangen
|
Jo, ist ein "-1 (minus eins)". Das "-R" kommt später 😉
|
nudeldieb
Anmeldungsdatum: 3. Juli 2005
Beiträge: 936
|
Tach, also: das
TMP=$(ls -1 | head -n 1) # filname älteste Liste listet dir nicht die älteste Liste, sondern das alphanumerische erste File im Directory.
Wie wird LST gefüllt? -ctime sollte man nicht verwenden, um einen geänderten Inhalt eines Files zu überprüfen. Aus der info-page zu find: Each file has three time stamps, which record the last time that certain operations were performed on the file: access (read the file's contents)
2. change the status (modify the file or its attributes) 3. modify (change the file's contents) Gruß, Andi
|
pepre
Supporter
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2005
Beiträge: 6474
Wohnort: Erlangen
|
listet dir nicht die älteste Liste, sondern das alphanumerische erste File im Directory
Das ist auch so gedacht und stimmt, da der filename ja mit "date -I" erstellt wird.
Wie wird LST gefüllt?
Hum? Steht doch im Script: "ls -1 > $LST"
-ctime
Passt auch, da das File erstellt wird, und bis zum Löschen nie mehr geändert wird. Das Script läuft ja, nur "diff" murkst. Und ich versteh nicht warum.
|
nudeldieb
Anmeldungsdatum: 3. Juli 2005
Beiträge: 936
|
Hum? Steht doch im Script: "ls -1 > $LST"
Hoppla, ich werde langsam alt, glaube ich... 😉 Läuft das Skript jeden Tag oder einmal die Woche wegen des ctime +7? Gruß, Andi
|
pepre
Supporter
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2005
Beiträge: 6474
Wohnort: Erlangen
|
Einmal am Tag um 5:20; also zu einer Uhrzeit, zu der kein Schwein neue Files rein schiebt 😉
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
pepre hat geschrieben: Das "diff" erzeugt, wenn es als cronjob läuft, eine Menge flascher Ausgaben - aber auch nicht immer. Rufe ich es direkt aus der bash auf, funktioniert alles wunderbar.
Setzt Du vorher die Pfade zu diff, grep und tr? Wenn es nur als cronjob nicht läuft, dann würde ich da anfangen zu suchen - aber dann dürfte es eigentlich nie laufen. Wie sehen denn die falschen Ausgaben aus, und wie sähen richtige Ausgaben aus? Das mit dem 'sleep 60' klingt nach Schlangenöl. Wie sieht der cronjob aus?
|
pepre
Supporter
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2005
Beiträge: 6474
Wohnort: Erlangen
|
Setzt Du vorher die Pfade zu diff, grep und tr?
Nein, geht auch so.
Wie sehen denn die falschen Ausgaben aus?
Ein diff auf die per cron erstellten Listen ergibt als Murks-Eintrag zB 8668d8676
< stoiber_-_gludernde_lot.mp3
8669a8678
> stoiber_-_gludernde_lot.mp3 Es werden zuviele Einträge als "neu" gelistet; sprich: Zeilen erscheinen, die in den zu vergleichenden Listen identisch sind. Und 'man diff' schweigt sich geflissentlich zu den ausgegebenen (differierenden) Zahlen aus; da muss ich wohl mal tiefergehend recherchieren.
Wie sieht der cronjob aus?
20 5 * * * root /usr/local/bin/bullshit > /dev/null 2>&1 wobei 'bullshit' diverse Aufgaben erledigt, unter anderem eben auch die Funktion 'neli'.
|
nudeldieb
Anmeldungsdatum: 3. Juli 2005
Beiträge: 936
|
Hmmm, ich würde jetzt nochmal ein diff -b ausprobieren. Ansonsten hilft hier vll ein comm -3 auf die beiden Files. Allerdings müssen sie dafür sortiert sein. HTH. Gruß, Andi
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4694
Wohnort: Berlin
|
pepre hat geschrieben: Ein diff auf die per cron erstellten Listen ergibt als Murks-Eintrag zB 8668d8676
< stoiber_-_gludernde_lot.mp3
8669a8678
stoiber_-_gludernde_lot.mp3 Es werden zuviele Einträge als "neu" gelistet; sprich: Zeilen erscheinen, die in den zu vergleichenden Listen identisch sind. Und 'man diff' schweigt sich geflissentlich zu den ausgegebenen (differierenden) Zahlen aus; da muss ich wohl mal tiefergehend recherchieren.
Sind die Zeilen wirklich 100% identisch? Keine Leerzeichen, Tabs oder Wagenrücklaufzeichen am Ende die man nicht sieht? Und was genau "schützt" Du mit dem sleep? Bist Du wirklich 100%ig sicher, dass da nicht noch andere Prozesse an den Daten basteln wenn die Funktion läuft? Mal ins Blaue geraten: Stimmen die Zahlen vor und nach dem 'a' ungefähr mit der Zeilennummer in der Textdatei überein?
|
pepre
Supporter
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2005
Beiträge: 6474
Wohnort: Erlangen
|
diff -b ; comm -3
"-b" schon probiert, kein Unterschied. Mit "comm" liesse sich ein Workaround realisieren, aber eigentlich will ich die Ursache für das Verhalten ergründen ☺
Sind die Zeilen wirklich 100% identisch? Keine Leerzeichen, Tabs oder Wagenrücklaufzeichen am Ende die man nicht sieht?
Sie sind - bis auf die fehlenden Zeilen - komplett identisch, sie werden ja vom gleichen Script erzeugt. Ok, ich werds mir nochmal als Hex genau ansehen.
Und was genau "schützt" Du mit dem sleep?
Die Partition mit den Files liegt auf einem LV in einem RAID5/LVM/loopAES-FS. Sicherheitshalber hab ich das "sleep" eingebaut, da dieses Konstrukt manchmal etwas zäh reagiert.
Bist Du wirklich 100%ig sicher, dass da nicht noch andere Prozesse an den Daten basteln wenn die Funktion läuft?
100%ig.
Stimmen die Zahlen vor und nach dem 'a' ungefähr mit der Zeilennummer in der Textdatei überein?
Ja, tun sie, das wusste ich schon. Leider hat mir diese Erkenntnis bisher nicht wirklich weitergeholfen. Muss mich wohl tiefer mit "diff" beschäftigen.
|
pepre
Supporter
(Themenstarter)
Anmeldungsdatum: 31. Oktober 2005
Beiträge: 6474
Wohnort: Erlangen
|
ls -1 | sort > $LST Aus unerfindlichen Gründen muss die Ausgabe von "ls" noch durch "sort" gepiped werden, dann funktioniert es.
|