Shell Script - Problem beim automatisierten von kcron
Shell Script - Problem beim automatisierten von kcron
Hallo,
ich habe mir mein erstes größeres (also mehr als 4 Zeilen ^^) Script geschrieben, welches über die HTML-Statusseite meines Routers dessen IP raus bekommt und mich ggf. über einen DSL-Reconnect informieren soll.
Dieses Script habe ich getestet und es läuft. yuhuu.
Dann hab ich es in die Tabelle von kcron eingetragen.
Dort direkt nochmal getesten - geht auch!
Aber automatisiert bekomm ich 2 Probleme:
1. scheinen die Werte nur Leer-Strings zu bekommen, statt der IP. Jedenfalls steht dann in der Datei, in der die IP gelagert werden soll, nur noch ein Leerstring da. In dem Fall beschwert sich cron per mail darüber, dass = kein unärer Operator ist, wenn ich die "" um die Variablen weglasse.
2. kann das automatisierte Script wohl nicht mehr auf mein Display für kdialog zugreifen.
Laut mail läuft das Ding aber als user und HOME ist auch richtig gesetzt.
Wo speichert eigentlich kcron die jobs ab? in /etc/crontab ist nix zu finden (script startet aller 5 Minuten)
Grüße
neogrande
Script: http://www.inf.tu-dresden.de/~s0100685/test_dsl.sh
ich habe mir mein erstes größeres (also mehr als 4 Zeilen ^^) Script geschrieben, welches über die HTML-Statusseite meines Routers dessen IP raus bekommt und mich ggf. über einen DSL-Reconnect informieren soll.
Dieses Script habe ich getestet und es läuft. yuhuu.
Dann hab ich es in die Tabelle von kcron eingetragen.
Dort direkt nochmal getesten - geht auch!
Aber automatisiert bekomm ich 2 Probleme:
1. scheinen die Werte nur Leer-Strings zu bekommen, statt der IP. Jedenfalls steht dann in der Datei, in der die IP gelagert werden soll, nur noch ein Leerstring da. In dem Fall beschwert sich cron per mail darüber, dass = kein unärer Operator ist, wenn ich die "" um die Variablen weglasse.
2. kann das automatisierte Script wohl nicht mehr auf mein Display für kdialog zugreifen.
Laut mail läuft das Ding aber als user und HOME ist auch richtig gesetzt.
Wo speichert eigentlich kcron die jobs ab? in /etc/crontab ist nix zu finden (script startet aller 5 Minuten)
Grüße
neogrande
Script: http://www.inf.tu-dresden.de/~s0100685/test_dsl.sh
Hi,
Ich kann dir zwar bei deinem konkreten Problem nicht helfen, aber vielleicht nützt dir folgendes Skript: http://nopaste.debianforum.de/3859.
Anstatt es per cron aufzurufen läuft es quasi als Daemon immer im Hintergrund und prüft alle 20 Sekunden ob sich die IP geändert hat, wenn ja, versucht es google anzupingen und holt die neue IP sobald der Ping geklappt hat.
Für deine Zwecke kannst du die ganzen Logsachen rausnehmen, dort wo die Geschichte mit centericq steht kannst du dein Dialogfenster einbauen (oder, da in deinem Skript was von licq steht, du änderst das Ganze so das es mit licq funktioniert, falls das der einzige Grund ist aus dem du das Skript brauchst).
MfG,
Leo
Ich kann dir zwar bei deinem konkreten Problem nicht helfen, aber vielleicht nützt dir folgendes Skript: http://nopaste.debianforum.de/3859.
Anstatt es per cron aufzurufen läuft es quasi als Daemon immer im Hintergrund und prüft alle 20 Sekunden ob sich die IP geändert hat, wenn ja, versucht es google anzupingen und holt die neue IP sobald der Ping geklappt hat.
Für deine Zwecke kannst du die ganzen Logsachen rausnehmen, dort wo die Geschichte mit centericq steht kannst du dein Dialogfenster einbauen (oder, da in deinem Skript was von licq steht, du änderst das Ganze so das es mit licq funktioniert, falls das der einzige Grund ist aus dem du das Skript brauchst).
MfG,
Leo
- SubOptimal
- Beiträge: 1709
- Registriert: 10.01.2005 23:25:46
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: bei Frankfurt
Hi neogrande,
da das Skript als cron job ausgeführt wird hat es kein Environment. Du musst also für wget und grep den kompletten Pfad angeben und $HOME ist dann nicht Dein $HOME sondern das von dem User unter dessen ID der Job von cron gestartet wird. Hier am besten auch den kompletten Pfad angeben.
Die Fehlermeldung kommt daher, weil in PRUFE_IP und AKT_IP eben nichts gespeichert ist. Dann wird aus
SubOptimal
da das Skript als cron job ausgeführt wird hat es kein Environment. Du musst also für wget und grep den kompletten Pfad angeben und $HOME ist dann nicht Dein $HOME sondern das von dem User unter dessen ID der Job von cron gestartet wird. Hier am besten auch den kompletten Pfad angeben.
Die Fehlermeldung kommt daher, weil in PRUFE_IP und AKT_IP eben nichts gespeichert ist. Dann wird aus
Code: Alles auswählen
if [ "$PRUEF_IP" != "$AKT_IP" ]
-> if [ "" != "" ]
und wenn Du die Anführungszeichen auch noch weg lässt
-> if [ != ]
Daran habe ich auch gedacht.
Allerdings steht in der Beschwerde-Mail von cron korrekterweise:
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/xxx>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=xxx>
Und das Home-Verzeichnis ist das korrekte...
Also sollte er schon $HOME und die ganzen Pfade kennen.
Mal davon abgesehen, scheinen die Variablen auch leer zu sein wenn ich die ganzen Pfadnamen korrekt ersetze...
und kdialog kennt er ja auch (beschwert sich ja über den nicht vorhandenen X-Server)
@Leo:
Danke für das Script, aber man hat ja dann schon den Ergeiz, dass das Eigene auch funktioniert
Hab aber auch schon an was daemon-artiges gedacht, wenn das mit cron so kompliziert ist.
Allerdings steht in der Beschwerde-Mail von cron korrekterweise:
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/xxx>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=xxx>
Und das Home-Verzeichnis ist das korrekte...
Also sollte er schon $HOME und die ganzen Pfade kennen.
Mal davon abgesehen, scheinen die Variablen auch leer zu sein wenn ich die ganzen Pfadnamen korrekt ersetze...
und kdialog kennt er ja auch (beschwert sich ja über den nicht vorhandenen X-Server)
@Leo:
Danke für das Script, aber man hat ja dann schon den Ergeiz, dass das Eigene auch funktioniert
Hab aber auch schon an was daemon-artiges gedacht, wenn das mit cron so kompliziert ist.
Hi,
wenn es die Umgebungsvariablen nicht sind, dann solltest du wirklich mal das Script auf nopaste stellen, sonst wird's helfen schwer.
wenn es die Umgebungsvariablen nicht sind, dann solltest du wirklich mal das Script auf nopaste stellen, sonst wird's helfen schwer.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
hm, ich hatte oben schon einen externen Link angegeben, aber schön formatiert ist natürlich besser:
http://nopaste.debianforum.de/3860
http://nopaste.debianforum.de/3860
Dann habe ich das ganze falsch verstanden. Ich dachte, du wolltest dein Script cron-gesteuert ausführen lassen.
Einen Eintrag in der crontab erstellst du, in dem du einfach ein crontab -e eingibst.
siehe dazu auch http://www.linuxfibel.de/time.htm
Einen Eintrag in der crontab erstellst du, in dem du einfach ein crontab -e eingibst.
siehe dazu auch http://www.linuxfibel.de/time.htm
Oh, yeah!
- SubOptimal
- Beiträge: 1709
- Registriert: 10.01.2005 23:25:46
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: bei Frankfurt
Hi neogrande,
Wie soll denn der Inhalt aus .aktuelle_ip in die Variable kommen?
Du könntest das z.B. so lösen
Das mit der $PRUEF_IP kann man ohne die HTML Seite schlecht prüfen. Aber ich denke das wird schon was ausspucken, wenn Du das in d Konsole testest.
Könnte eventuell eine Passwortabfrage das Problem sein?
SubOptimal
Code: Alles auswählen
AKT_IP=`$HOME /home/makoer/.aktuelle_ip`
Du könntest das z.B. so lösen
Code: Alles auswählen
AKT_IP=`cat /home/makoer/.aktuelle_ip`
Könnte eventuell eine Passwortabfrage das Problem sein?
SubOptimal
*grml*
das mit der AKT_IP war ein dummer fehler beim reinkopiere. Ich wollte eigentlich das /home/makoer durch $HOME ersetzen, um das ursprüngliche Script zu posten...
Das cat war da schon drin
Der wget-grep-Ausdruck funktioniert, habe ich ja mehrmals getestet...
Na, ich hab jetzt jedenfalls so ne Art daemon draus gemacht, funktioniert einwandfrei.
das mit der AKT_IP war ein dummer fehler beim reinkopiere. Ich wollte eigentlich das /home/makoer durch $HOME ersetzen, um das ursprüngliche Script zu posten...
Das cat war da schon drin
Der wget-grep-Ausdruck funktioniert, habe ich ja mehrmals getestet...
Na, ich hab jetzt jedenfalls so ne Art daemon draus gemacht, funktioniert einwandfrei.