• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

locate-Problem - Datenbank verschwindet

Hallo,

auf einer openSUSE 11.0 habe ich das Problem, dass die locate-Datenbank immer wieder verschwindet.

Das sieht so aus:

1) updatedb manuell gestartet
2) danach findet loacte, was was es finden soll
3) shutdown, am nächsten Tag Neustart
4) locate findet nichts mehr
5) goto 1)

updatedb steht natürlich auch in /etc/cron/daily, aber da der Rechner nur stundenweise an ist, könnte es sein, dass das nie zum tragen kommt.

Weiß jemand, was da für finstere Mächte walten?

Zusatzfrage: In welcher Datei liegt eigentlich die locate-Datenbank?

Danke für alle Tips
 

Tooltime

Advanced Hacker
Wie startest du exakt updatedb?

Cron schaut zu jeder vollen Viertelstunde (12:00, 12:15, 12:30, ...) nach ob der letzte cron-daily Aufruf länger als 24h her ist, wenn ja wird cron-daily wieder gestartet. War der Rechner ausgeschaltet erfolgt dieser Aufruf also spätestens zur vollen Viertelstunde nach booten. Der erste Problem ist, es zählen auch angefangene Durchgänge. Nehmen wir an in cron-daily stehen 10 Einträge die täglich ausgeführt werden sollen, wobei cron stets einen nach den anderen ausführt. An Position 2 steht ein Befehl (beagle-crawl-system) der sehr lange läuft und updatedb steht erst an Positon 8. Dann kann es z.B. passieren, das das System heruntergefahren oder neugestartet wird, während Position 2 noch läuft. Aus der Sicht von cron wurde cron-daily ausgeführt und der nächste Lauf ist erst in 24h fällig. Naja, beim nächsten Lauf beginnt das Spiel von Vorn. Dadurch wird der erste lauf von Position 8 solange herausgezögert bis alle Positionen vor ihm mindestens einmal bis zum Ende ausgeführt wurden.

Die einfachste Maßnahme die mir einfällt ist beagle zu deinstallieren, oder einmal zu warten bis beagle-crawl-system durchgelaufen ist. Nur der erste Lauf von beagle dauert richtig lange, das aktualisieren geht später wesentlich schneller. Um einen Lauf von cron-daily zu erzwingen, kann man als root die Datei /var/spool/cron/lastrun/cron.daily löschen, dann wird cron-daily zur nächsten vollen Viertelstunde ausgeführt.

Also mein Tip:

  • Rechner einschalten, /var/spool/cron/lastrun/cron.daily löschen und mal 1 Stunden laufen lassen. Natürlich kann man während dieser Stunde den Rechner normal weiter benutzen, es geht ja nur darum cron-daily genug Zeit zu geben um einmal durch zu laufen.
 
OP
H

hermann123

Newbie
Tooltime schrieb:
Wie startest du exakt updatedb?
Ganz einfach: # updatedb

Die einfachste Maßnahme die mir einfällt ist beagle zu deinstallieren, oder einmal zu warten bis beagle-crawl-system durchgelaufen ist. Nur der erste Lauf von beagle dauert richtig lange, das aktualisieren geht später wesentlich schneller. Um einen Lauf von cron-daily zu erzwingen, kann man als root die Datei /var/spool/cron/lastrun/cron.daily löschen, dann wird cron-daily zur nächsten vollen Viertelstunde ausgeführt.

Beagle ist auf der Kiste deinstalliert, weil es nach meinem Empfinden den Rechner bis zur Unbenutzbarkeit ausbremst.


Also mein Tip:

  • Rechner einschalten, /var/spool/cron/lastrun/cron.daily löschen und mal 1 Stunden laufen lassen. Natürlich kann man während dieser Stunde den Rechner normal weiter benutzen, es geht ja nur darum cron-daily genug Zeit zu geben um einmal durch zu laufen.

Aber selbst wenn cron.daily nie komplett durchläuft, müsste doch die Datenbank aus dem letzten manuellen updatedb vorhanden sein und locate somit funktionieren?!?

Ich werde jetzt mal /var/spool/cron/lastrun/cron.daily löschen und sehen, was passiert.

Danke für deine Antwort
 

Tooltime

Advanced Hacker
Wenn ich updatedb schon manuell aufrufen will, dann mache ich es genauso wie cron, sonst werden möglicher Weise einige Parameter oder Variablen nicht richtig gesetzt. (als root/etc/cron.daily/suse.de-updatedb)
 
OP
H

hermann123

Newbie
Tooltime schrieb:
Wenn ich updatedb schon manuell aufrufen will, dann mache ich es genauso wie cron, sonst werden möglicher Weise einige Parameter oder Variablen nicht richtig gesetzt. (als root/etc/cron.daily/suse.de-updatedb)

Okay, ist einen Versuch wert.

Allerdings verwende ich das schlichte updatedb seit SUSE 8.0, z.B. wenn ich die Aktualisierung der locate-DB erzwingen will. Hat früher immer geklappt.

Das löschen von var/spool/cron/lastrun/cron.daily hat übrigens nichts gebracht. Der Rechner ist inzwischen ein paar Stunden gelaufen.

Nachtrag:

Wenn ich updatedb als etc/cron.daily/suse.de-updatedb aufrufe, wird keine DB angelegt, locate findet anschließend nichts. Beim schlichten updatedb funzt locate zumnidest bis zum nächsten reboot.

???

Noch jemand mit irgendwelchen Vorschlägen?
 

Tooltime

Advanced Hacker
Schau mal in /etc/sysconfig/locate nach. Dort sind die besagten Einstellungen die im cron-script aufgerufen werden.
z.B. RUN_UPDATEDB="yes"
Ist eine neue Datei /var/spool/cron/lastrun/cron.daily vorhanden. Das wäre ein Zeichen das cron-daily ausgeführt wurde. Bei mir funktioniert locate unter 11.0 ohne Probleme. Wenn alles funktioniert liegt die DB unter /var/lib/locatedb.
 
OP
H

hermann123

Newbie
Tooltime schrieb:
Schau mal in /etc/sysconfig/locate nach. Dort sind die besagten Einstellungen die im cron-script aufgerufen werden.
z.B. RUN_UPDATEDB="yes"
Yep,der Eintrag ist vorhanden.
Ist eine neue Datei /var/spool/cron/lastrun/cron.daily vorhanden. Das wäre ein Zeichen das cron-daily ausgeführt wurde. Bei mir funktioniert locate unter 11.0 ohne Probleme. Wenn alles funktioniert liegt die DB unter /var/lib/locatedb.
Als ich die Kiste gestern abend ausgeschaltet habe, /var/spool/cron/lastrun/cron.daily vorhanden, Zeitstempel 27. Juli 17:45, außerdem existierte /var/lib/locatedb. Nach dem Neustart gerade eben, war var/spool/cron/lastrun/cron.daily weg, die locatedb aber noch vorhanden. Demgemäß tut es auch locate.

Ich werde das mal weiter beobachten und berichten.

Nachtrag: Ich hatte gestern auf gut Glück noch eine Änderung in /etc/sysconfig/locate vorgenommen. Statt RUN_UPDATEDB_AS=nobody steht da jetzt RUN_UPDATEDB_AS=root.
 

Tooltime

Advanced Hacker
War wieder ein blöde Idee von mir mit "/etc/sysconfig/locate" ohne Vergleichsdaten zu liefern. Das verleitet ja nur etwas zu verändern. Also meine Datei ohne Kommentarzeilen.
"/etc/sysconfig/locate":
Code:
RUN_UPDATEDB_AS="nobody"
RUN_UPDATEDB="yes"
UPDATEDB_NETPATHS=""
UPDATEDB_PRUNEPATHS="/mnt /cdrom /tmp /usr/tmp /var/tmp /var/spool /proc /media /sys /windows /Testsystem /daten /import"
UPDATEDB_NETUSER=""
UPDATEDB_PRUNEFS=""
Also ich schlage folgende Vorgehensweise vor:
Löschen /var/lib/locatedb (ca. 2,7MB) und /var/spool/cron/lastrun/cron.daily.
Wenn nach einer halben Stunde beide Dateien wieder da sind, können wir wohl zurecht behaupten das das Indexing funktioniert und das Problem bei der Abfrage der Datenbank liegen muss. Oder was meinst du?

PS: Benutze 11.0 32-Bit
 
OP
H

hermann123

Newbie
Hallo Tooltime,

sorry für meine späte Antwort.
Tooltime schrieb:
War wieder ein blöde Idee von mir mit "/etc/sysconfig/locate" ohne Vergleichsdaten zu liefern. Das verleitet ja nur etwas zu verändern. Also meine Datei ohne Kommentarzeilen.
"/etc/sysconfig/locate":
Code:
RUN_UPDATEDB_AS="nobody"
RUN_UPDATEDB="yes"
UPDATEDB_NETPATHS=""
UPDATEDB_PRUNEPATHS="/mnt /cdrom /tmp /usr/tmp /var/tmp /var/spool /proc /media /sys /windows /Testsystem /daten /import"
UPDATEDB_NETUSER=""
UPDATEDB_PRUNEFS=""
Also ich schlage folgende Vorgehensweise vor:
Löschen /var/lib/locatedb (ca. 2,7MB) und /var/spool/cron/lastrun/cron.daily.
Wenn nach einer halben Stunde beide Dateien wieder da sind, können wir wohl zurecht behaupten das das Indexing funktioniert und das Problem bei der Abfrage der Datenbank liegen muss. Oder was meinst du?

PS: Benutze 11.0 32-Bit

Das Problem hat sich anscheinend erledigt, auch wenn ich nicht weiß, wo der Fehler lag. Nach dem Löschen der Dateien werden sie per Cron wieder erzeugt und die DB übersteht jetzt auch einen Neustart.

Danke für deine Hilfe!
 
Oben