Phil: Problem - Unterschied von Shell zu crontab

Hallo Zusammen,

Folgendes einfaches Script habe ich mir geschrieben (Debian)

if [ "xyz" = "xyz" ] ; then
echo "Erfolg" > Erfolg.text
else
echo "Misserfolg" > Misserfolg.txt
fi

Nun, wenn ich das Programm mit Putty starte funktioniert alles einwadnfrei. Wenn ich aber das Programm mittels Crontab automatisch laufen lasse, passiert überhaupt nichts!

Wie kann das sein?

Danke und Gruss

  1. echo ($light == true) ? 'Guten Tag,' : 'Guten Abend,';

    hmm auf die Rechte geachtet? Wenn das Script nur von Besitzer ausgeführt werden kann funktioniert es mit Crontab nicht (zumindest war es bei mir so).

    Grüße

    Markus

    --
    Das Böse ist grau ... color:#666;
    1. Hallo,

      Danke für die fleissige Hilfe. An den Rechten liegt es nicht, habe es eben getestet. Der Tipp mit dem cd war auch super, auch dieser hat nicht das gewünschte Resultat erbracht.

      Ich habe in meinen Root-Mails angeschaut, keine Fehlermeldungen. Es scheint mir sowieso alles ein wenig seltsam. Ursprüglich hat das Script wie folgt ausgesehen.

      x=$(grep 'xyz' datei_mit_diesem_Inhalt.php)

      if [ "$x" = "xyz" ] ; then
      echo "Erfolg" >> Log.txt
      else
      echo "Misserfolg" | mail info@beispiel.de
      fi

      Dieses Script wollte ich verwenden um die Verfügbarkeit meines Servers zu testen.

      Nun das ursprüngliche Problem war, das auch in diesem Fall das Script, wenn es direkt ausgeführt wurde, perfekt funktioniert. (Wenn xyz=xyz wir ein Log eintrag erstellt. Wenn ungleich wird eine Mail versendet)

      Wir dieses Script nun mittels crontab ausgeführt, wird die Mail immer gesendet, egal ob xyz=xyz oder nicht?

      Den Code habe ich geprüft, die Variablen stimmen. Das seltsame ist ja, wenn ich das Script von Hand via Putty ausführe, klappt es!

      *verwirrt bin* :-)

  2. Hi Phil,

    if [ "xyz" = "xyz" ] ; then
    echo "Erfolg" > Erfolg.text
    else
    echo "Misserfolg" > Misserfolg.txt
    fi

    Nun, du hast also dieses Script beispielsweise in einer Datei namens test.sh abgespeichert, welche Ausführrechte besitzt, ja?

    Wenn du das Script über die Shell startest, das Script unter /home/phil/test.sh liegt und du dich im Ordner /home/phil befindest, so versucht das Script die Dateien /home/phil/Erfolg.text bzw. /home/phil/Misserfolg.txt anzulegen. Da das in deinem Home-Directory ist, sollte das kein Problem sein ;-)

    Führt nun der Cronjob dein Script aus, so muss es nicht unbedingt sein, dass der Cronjob vorher in das Verzeichnis /home/phil wechselt. Befindet er sich in /, so versucht dein Script /Erfolgt.text bzw. /Misserfolg.txt anzulegen - was hoffentlich nicht funktionieren sollte *g*

    Ich weiß jetzt gerade nicht in welchem Directory der Cronjob das Script ausführt, wenn du nichts anderes angibst, aber hast du schon mal probiert in deinem Script mit einem cd /home/phil anzufangen? Alternativ (in machen Fäller vielleicht sogar besser) kannst du natürlich auch die Ausgabedateien absolut angeben also „> /home/phil/Erfolg.text” etc.

    Ach ja, hast du mal in deinem mail geguckt, ob du nicht eventuell Fehlermeldungen als Mail bekommen hast? Das sollte eigentlich standardmäßig der Fall sein. Du kannst dies in deiner crontab aber auch deaktivieren bzw. eine andere E-Mail Adresse angeben.

    Viele Grüße,
      ~ Dennis.

  3. Hallo Phil,

    Folgendes einfaches Script habe ich mir geschrieben (Debian)

    if [ "xyz" = "xyz" ] ; then

    das ist sicher bereits ein erster Fehler, vielleicht auch ein Übertragungsfehler.

    echo "Erfolg" > Erfolg.text
    else
    echo "Misserfolg" > Misserfolg.txt
    fi

    Nun, wenn ich das Programm mit Putty starte funktioniert alles einwadnfrei. Wenn ich aber das Programm mittels Crontab automatisch laufen lasse, passiert überhaupt nichts!

    Wie kann das sein?

    Du solltest in Deine Mail schauen.
    Ausgaben auf die Standardausgabe werden typischerweise dem Besitzer des Cronjobs
    zugemailt, siehe auch

    man cron

    Eine Alternative wäre es, die Ausgabe des Skriptes in einer Logdatei aufzuzeichnen.

    Freundliche Grüße

    Vinzenz

    1. Hallo Ingrid,

      echo "Erfolg" > Erfolg.text
      else
      echo "Misserfolg" > Misserfolg.txt

      ich bin müde,

      Eine Alternative wäre es, die Ausgabe des Skriptes in einer Logdatei aufzuzeichnen.

      Absolute Pfadangaben, wie von Dennis empfohlen, sind sehr empfehlenswert.

      Freundliche Grüße

      Vinzenz