Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 24

Thema: Script arbeitet von shell aus ok, aber nicht per cronjob

  1. #1
    Registrierter Benutzer
    Registriert seit
    20.09.2004
    Beiträge
    38

    Question Script arbeitet von shell aus ok, aber nicht per cronjob

    Hallo erstmal,

    ich habe folgendes Problem:

    Per Script hole ich mir die aktuelle IP und wenn sich Diese bei einem weiteren
    Aufruf des Scripts ändert wird ein Programm namens updatedd gestartet das
    die neue IP bei dyndns registriert.

    Von einer console aus läuft das einwandfrei, nur wenn ich das ganze in meine
    crontab eintrage ("*/5 * * * * /blablub/myipscript") wird das Script noch
    gestartet, aber dann erhalte ich statt "IP erfolgreich aktualisiert", folgende
    Fehlermeldung: "Try `updatedd --help' for more information.", mehr nicht.

    Muss ich in meinem script beim Aufruf von updatedd etwas beachten?
    zZ liegt es einfach in einem else Pfad einer if Abfrage:
    else updatedd dyndns MYUSER:MYPASS MYHOST;

    Wäre nett wenn mir jemand helfen könnte.
    mfg Navy

  2. #2
    Registrierter Benutzer Avatar von TheDodger
    Registriert seit
    17.05.2001
    Ort
    Hamburg
    Beiträge
    615
    Gibt es bei updatedd vielleicht eine --verbose option, damit man etwas mehr vom ursprünglichen Fehler sieht?
    Bodo
    Systemadmistration UNIX

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.09.2004
    Beiträge
    38
    Nein, zumindest keine dokumentierte. Gibt es ne möglichkeit zu definieren das
    updatedd dyndns MYUSER:MYPASS MYHOST ein zusammenhängender Befehl ist?
    Wenn ich nur updatedd ohne Paramater starte bekomme ich die selbe Fehlermeldung.

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Poste doch mal das Script.

    Der Hauptunterschied der oft Probleme macht zwischen "normal Ausführen" und Cronjob ist dass beim Cronjob die PATH-Variable nicht gesetzt ist - d.h. du verwendest absolute Pfade zu den Programmen oder setzt die Variable am Scriptanfang selber.

    Allerdings verstehe ich die Fehlermeldung so auch nicht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer
    Registriert seit
    20.09.2004
    Beiträge
    38
    Hm Pfadangaben teste ich schnell mal aber moment das Programm findet er ja

    Hier mal das script:

    #!/bin/sh
    wget -q http://checkip.dyndns.org/index.html --output-document=/root/bin/neu.ip --timeout=3
    if [ "`cat /root/bin/neu.ip`" = "`cat /root/bin/alt.ip`" ]
    then echo No new IP;
    else updatedd dyndns USER:PASS HOST; echo "New IP";
    fi
    rm /root/bin/alt.ip
    mv /root/bin/neu.ip /root/bin/alt.ip

    Bin grad auch noch am feilen um die ganzen file Operationen gegen Parameter
    zu ersetzen, aber primär jetzt mal das updatedd im cron ans laufen zu kriegen.

  6. #6
    Registrierter Benutzer
    Registriert seit
    20.09.2004
    Beiträge
    38
    Ich könnt sowas von kotzen, ich hab jetzt hier eine Woche mit diesem
    miniscript verschissen und jetzt gehts nur weil ich #!/bin/bash verwende
    anstatt #!/bin/sh . *argh*

    Hoffe es hilft wenigstens jemand anderem der ein ähnliches Problem hat.

    mfg Navy

  7. #7
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Aber /bin/sh ist bei mir zumindest ein Symlink auf /bin/bash

    Oder liegts eventuell gerade daran? Dass Cron keine Programme via Symlinks starten will?

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  8. #8
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Zitat Zitat von peschmae
    Aber /bin/sh ist bei mir zumindest ein Symlink auf /bin/bash
    MfG Peschmä
    Das ist aber nur unter Linux so, andere Unices haben da die echte Bourne Shell.

    fs111

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.06.2004
    Ort
    Stammheim
    Beiträge
    43
    Programme mit Cron via Symlink starten klappt bei mir jedenfalls Bestens...

    Roli
    date "+60ss%Sls%M*+lsd*r-p" | dc

  10. #10
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von fs111
    Das ist aber nur unter Linux so, andere Unices haben da die echte Bourne Shell.
    Ich weiss, das war auch nicht "da point" von dem Satz

    Danke@Roli

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  11. #11
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    gibt da so einiges was man machen könnte.

    set -xv in das script einbauen. Damit erhält man eine Ablaufverfolgung. Läuft sowohl in der bash als auch in der sh. Hier mal ein Beispielscript:
    Code:
    echo $(date); sleep 1;
    echo $(date); sleep 1;
    set -xv
    echo $(date); sleep 1;
    echo $(date); sleep 1;
    echo $(date); sleep 1;
    Hier kommt die Ausgabe:
    Code:
    [hans@rosi tmp]$ ./xyz.sh
    Do Sep 23 21:07:37 CEST 2004
    Do Sep 23 21:07:38 CEST 2004
    echo $(date); sleep 1;
    date
    +++ date
    ++ echo Do Sep 23 21:07:39 CEST 2004
    Do Sep 23 21:07:39 CEST 2004
    ++ sleep 1
    echo $(date); sleep 1;
    date
    +++ date
    ++ echo Do Sep 23 21:07:40 CEST 2004
    Do Sep 23 21:07:40 CEST 2004
    ++ sleep 1
    echo $(date); sleep 1;
    date
    +++ date
    ++ echo Do Sep 23 21:07:41 CEST 2004
    Do Sep 23 21:07:41 CEST 2004
    ++ sleep 1
    [hans@rosi tmp]$
    Wenn du die Standardausgabe nicht ins Nirwana schickst, dann bekommst du eine Mail von der cron.

    set > /tmp/irgendwas.txt

    Listet alle Variablen in der Datei /tmp/irgendwas.txt. Da sieht man dann was in der cron fehlt.

    Hans
    Geändert von Hans-Georg Normann (23-09-2004 um 20:14 Uhr)
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  12. #12
    Registrierter Benutzer
    Registriert seit
    20.09.2004
    Beiträge
    38
    hm war nicht die Shell sondern der absolute Pfad auf updatedd die ich
    gleichzeitig ins Script eingefügt habe. Aber warum läuft das Script dann wenn
    ich es aus der Shell aufrufe aber nicht wenn cron es aufruft ?

    *grübel*
    in "PATH=" ist der pfad in dem updatedd liegt enthalten

    Hier jetzt das script das funktioniert:

    #!/bin/bash
    wget -q http://checkip.dyndns.org/index.html --output-document=/root/bin/neu.ip
    IP=`cat /root/bin/neu.ip|grep ^'<html>'|sed 's/[^0-9.]//g'`
    echo $IP > neu.ip
    if [ $IP = `cat /root/bin/alt.ip` ]
    then nothing=0;
    else /usr/local/bin/updatedd dyndns -- -4 $IP USER:PASS HOST; echo "Neue IP = " $IP
    fi
    mv /root/bin/neu.ip /root/bin/alt.ip
    Geändert von Navy2k (24-09-2004 um 17:59 Uhr)

  13. #13
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Einige Anmerkungen zu deinem Script sollten erlaubt sein:
    • Auch wenn es nur ein sehr kleines Script ist, ein bisschen Struktur kann nicht schaden.
    • Am Besten die Pfade immer als erstes im Script als Variable anlegen. Das erleichtert die Pflegbarkeit des Codes.
    • Kommentare sollten auch immer vorhanden sein. Aus Gründen der Übersichtlichkeit habe ich hier aber auch darauf verzichtet.
    • Was passiert, wenn $WORKDIR/alt.ip nicht vorhanden ist? Bei mir führte das zu einem Fehler. Deshalb habe ich die Datei, wenn nicht vorhanden mit 0.0.0.0 initialisiert.
    Nach soviel Gesabber bekommst du natürlich auch das modifizierte Script zu sehen.
    Code:
    #!/bin/bash
    
    WORKDIR=/etc  #oder was auch immer
    UPDATEDD=/usr/local/bin/updatedd
    
    ## edit  27.09.2004 checkip.dydns.org erreichbar?
    ping -c 1 checkip.dyndns.org >/dev/null || exit
    ## end edit
    
    wget -q http://checkip.dyndns.org/index.html --output-document=$WORKDIR/neu.ip
    IP=`cat $WORKDIR/neu.ip|grep ^'<html>'|sed 's/[^0-9.]//g'`
    echo $IP > $WORKDIR/neu.ip
    
    if [ ! -f $WORKDIR/alt.ip ]; then
      echo "0.0.0.0" > $WORKDIR/alt.ip
    fi
    
    if [ $IP != $(cat $WORKDIR/alt.ip) ]; then
      $UPDATEDD  dyndns -- -4 $IP USER:PASS HOST
      echo "Neue IP = " $IP
    fi
    
    mv $WORKDIR/neu.ip $WORKDIR/alt.ip
    Viel Spaß damit

    Hans
    Geändert von Hans-Georg Normann (27-09-2004 um 22:39 Uhr)
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  14. #14
    Registrierter Benutzer
    Registriert seit
    20.09.2004
    Beiträge
    38
    Hi,

    danke für deine gut gemeinten Tips. Das was ich gepostet habe war aber auch
    nicht das endgültige Script. Wenn man hald gestresst ist wegen einem Fehler
    der nicht klar ersichtlich ist und 3-4 mal ganz neu anfängt (ursprünglich wollte
    ich auch die IP Adresse von meinem Router abholen) leidet die Struktur hald etwas
    Ach und ich seh grad das Forum hat das letzte bischen Struktur in der Abfrage
    auch noch gekillt.

    Ne kleinigkeit hast du aber auch übersehen, wenn keine Verbindung zu
    http://checkip.dyndns.org/index.html besteht.

    Muss dir aber ich grossen und ganzen Recht geben das mein gepostetes Script
    übell aussieht


    mfg Navy

  15. #15
    Registrierter Benutzer
    Registriert seit
    24.09.2004
    Beiträge
    31
    Zitat Zitat von Navy2k
    hm war nicht die Shell sondern der absolute Pfad auf updatedd die ich
    gleichzeitig ins Script eingefügt habe. Aber warum läuft das Script dann wenn
    ich es aus der Shell aufrufe aber nicht wenn cron es aufruft ?

    *grübel*
    in "PATH=" ist der pfad in dem updatedd liegt enthalten
    in Deinem PATH schon, aber vermutlich nicht in dem PATH von cron.


    zur Not einfach mal ein Script per Cron starten, dass den Path in eine Datei schreibt. Ist meist nur /usr/bin und /bin - und wenn Dein aufgerufenes Prg da nicht drin liegt iss' Essig ;-)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •