Der häufigste Grund, warum cronjobs nicht laufen, obwohl sie in der Shell funktionieren, sind andere Pfade und Umgebungsvariablen. Manchmal hat man auch den User unter dem das Script läuft falsch eingegeben. In seltenen Fällen übersieht man, dass das Script zwischendurch nach einer Eingabe verlangt.
osmupdate Parameter: deu-old.osm.pbf
osmupdate Parameter: --hour
osmupdate Parameter: --day
osmupdate Parameter: --keep-tempfiles
osmupdate Parameter: deu.osm.pbf
osmupdate Parameter: -B=deu.poly
osmupdate: timestamp of deu-old.osm.pbf: 2014-04-15T04:00:00Z
osmupdate: newest hourly timestamp: (no timestamp)
osmupdate Error: Could not get the newest hourly timestamp from the Internet.
Press ENTER to continue and close this window.
osmupdate Parameter: deu-dnk-aut-che-old.osm.pbf
osmupdate Parameter: --hour
osmupdate Parameter: --day
osmupdate Parameter: --keep-tempfiles
osmupdate Parameter: deu-dnk-aut-che.osm.pbf
osmupdate Parameter: -B=deu-dnk-aut-che.poly
osmupdate: timestamp of deu-dnk-aut-che-old.osm.pbf: 2014-04-15T16:00:00Z
osmupdate: newest hourly timestamp: (no timestamp)
osmupdate Error: Could not get the newest hourly timestamp from the Internet.
Press ENTER to continue and close this window.
Du solltest schauen, ob die Umgebungsvariablen für das Script andere sind als im Terminal…
Im Script diese Zeile einbauen:
env > /tmp/sh_env.txt
Wenn das Script gelaufen ist (je nach Cronjob-Einstellungen täglich, stündlich, bei Start), sprich: die Datei /tmp/sh_env.txt ist vorhanden, dann folgende Zeile händisch im Terminal ausführen:
env > /tmp/term_env.txt
Schritt 3 wieder im Terminal, Unterschiede feststellen:
diff /tmp/sh_env.txt /tmp/term_env.txt
Zwischendurch keinen Neustart machen, dabei wird /tmp/* aufgeräumt.
ansonsten möchte ich dir noch einen Trick verraten. Ich benutze “Geplane Aufgaben” nicht, nehme aber an, dass der in Endeffekt einen Cronjob absetzt. Ich starte meine Cronjobs nach dem folgenden Schema:
also Startzeiten, Befehl mit Argumenten, Output nach cron.log und - das ist der Trick - alle Fehlermeldungen mit 2>&1 auch in das Logfile.
Im Cronjob mach ich
*#!/bin/bash
#set -x
cd /home/walter/osm/db/planet2*
…
und wenn es ganz eng wird
*#!/bin/bash
set -x
cd /home/walter/osm/db/planet2*
Damit bin ich eigentlich ganz gut zurecht gekommen (war auch mal Linux-Newbie, ist nur einige Jährchen her). Daher gratuliere ich dir nachträglich zu dieser Entscheidung, die dir langfristig viel bringen wird. Entspricht in etwa einem Umstieg auf Josm - der tut am Anfang auch ein wenig weh.
Gruss
walter
ach ja: bei >> ist kein Lehrzeichen dazwischen, das sieht nur so aus.
#!/bin/bash
#
set -x
#
cd ~/Dokumente/mkgmap
osmupdate -v deu-old.osm.pbf --hour --day --keep-tempfiles deu.osm.pbf -B=deu.poly
Ergebnis bricht ab:
+ cd /home/marko/Dokumente/mkgmap
+ osmupdate -v deu-old.osm.pbf --hour --day --keep-tempfiles deu.osm.pbf -B=deu.poly
osmupdate Parameter: deu-old.osm.pbf
osmupdate Parameter: --hour
osmupdate Parameter: --day
osmupdate Parameter: --keep-tempfiles
osmupdate Parameter: deu.osm.pbf
osmupdate Parameter: -B=deu.poly
osmupdate: timestamp of deu-old.osm.pbf: 2014-04-15T04:00:00Z
osmupdate: newest hourly timestamp: (no timestamp)
osmupdate Error: Could not get the newest hourly timestamp from the Internet.
Press ENTER to continue and close this window.
Ich denke das ein Fehler in Osmupdate ist, obwohl es ja manuell geht?
Das Programm holt sich wie den Zeitfaktor nicht?
Für den Zeitstempel ruft osmupdate wieder ein externes Tool (wget) auf, was wohl als Job irgendwie nicht funktioniert.
Wir brauchen da mehr Logging Infos. Setz mal vorübergehend den Logging Level von 1 auf 3 hoch, probier das ganze nochmal und poste hier die Ausgabe.
Nunja, wir haben etwas mehr Diagnose-Infos, aber der Fehler ist natürlich noch da. Dummerweise sagt das Log nicht, warum wget nicht ausgeführt werden konnte (die Fehlermeldung wird unterdrückt).
Ich denke, es macht am meisten Sinn, mal folgende Anleitung zu konsultieren:
Wenn Du dann crontab -e auf der Konsole aufrufst, sollte aktuell mindestens ein Eintrag für dein Script drin sein, richtig? Steht da auch was mit PATH=…?
Falls nicht, bau mal die Zeile 5 aus der Anleitung oben mit rein, also:
Ja genau, Du musst deinem crontab noch den Pfad beibringen. Das hatte ich in Post #73 doch geschrieben.
Äh, nein. Ich meinte nicht Login, sondern Logging. Das bedetet soviel wie mehr Infos ausgeben, damit man eher sieht wo es klemmt.
Damit sind wir aber fertig.
Schau Dir nochmal die Anleitung für crontab an, die ich oben gepostet habe und prüfe, ob dort am Anfang ein Eintrag für PATH zu finden ist. Wichtig: Wenn nicht, dann wie beschrieben den PATH ergänzen.
Crontab ist eine Textdatei, in der drinsteht, wann auf deinem System welches Script ausgeführt werden soll.
Dem crontab kannst Du auch sagen, wo es nach Dateien suchen soll (das wäre dann der PATH).
Daran hapert es im Moment.
Prinzip jetzt klarer?
Kannst Du das –login am Ende der Zeile wieder entfernen? Das war nicht verlangt und bringt uns nicht weiter.
wollte mich ja raushalten, aber solange das mit den Diff-Files nach dem Server-Crash heute Nacht nicht gefixt ist, würde ich die Finger von dem Update lassen. Der kann eigentlich gerade überhaupt nicht funktionieren.