Script als Cron läuft nicht richtig

Dany

Well-Known Member
Hallo Leute,

danke für Eure Antwort in meinen letzten Beitrag. Nun habe ich mein Script fertig. Wenn ich dieses auf der Shell ausführe funktioniert es super. Wird dieses aber über einen Cronjob ausgeführt dann funktioniert es nicht mehr.

Beispiel:
#! /bin/sh
Memory=`sysctl -n hw.physmem`
echo $Memory >> /var/log/test.log

Wie gesagt wenn ich es ausführe funktioniert es, per Cron nicht. Was ist der Fehler oder wie kann ich dieses Ziel erreichen?


Danke Dany
 
Klassisch bei cron-jobs ist, dass das Environment nicht mit
der interaktiven Sitzung übereinstimmt.
Bekommst Du denn eine Status-Mail?
Setze mal "sh -x" ins Script und lass es per cron laufen.

Das .profile der interaktiven Shell im Cronjob einzulesen ist
übrigens keine gute Idee. Besser ist, das Script so zu
ändern, dass es nicht davon abhängig ist, also fehlende
Environment-Variablen im Script zu setzen.
Sonst änderst Du mal was in deinem Setup und wunderst
dich wieder, warum dir der Cronjob um die Ohren fliegt.

In Bourne-Shell Scripten solltest Du auf den Backtick (`)
besser verzichten und stattdessen die neuere, sicherere
Schreibweise nehmen:

Memory=$(sysctl -n hw.physmem)

Die hat vor allem auch den Vorteil, dass sie sich schachteln
lässt und man nicht so viel Stress mit Qute-escaping bekommt.
 
#!/bin/sh
Memory=$(/sbin/sysctl -n hw.physmem)
/bin/echo $Memory >> /var/log/test.log


Aber warum so kompliziert?
/sbin/sysctl -n hw.physmem >> /var/log/test.log
tut's doch auch!
 
Vermutlich will er eigentlich nur den Wert haben um ihn an
anderer Stelle zu benutzen und das Echo dient nur zum
Debugging. Dafür spricht ja auch der Name test.log ;)
 
Hallo,

danke für eure Antworten, die haben mir sehr geholfen. Nur noch eine kleine Frage:

Das .profile der interaktiven Shell im Cronjob einzulesen ist
übrigens keine gute Idee. Besser ist, das Script so zu
ändern, dass es nicht davon abhängig ist, also fehlende
Environment-Variablen im Script zu setzen.
Sonst änderst Du mal was in deinem Setup und wunderst
dich wieder, warum dir der Cronjob um die Ohren fliegt.
Wie kann ich das erreichen und wie sieht es bei dir aus? Kannst du mir eine kleines Beispiel zukommen lassen?

Ja wie man sieht bin ich am Anfang mit den Scripten auf der Shell aber es geht schon vorran.

Nochmals Danke und bis bald Dany
 
Wenn es Konfigurationswerte sind, die über verschiedene
Cron-Jobs hinweg gemeinsam gesetzt werden sollen, dann
kann man sie in der Crontab einbauen, ansonsten halt zu
Beginn des jeweiligen Scripts.

Wichtig ist vor allem von der Programmstruktur her, dass man
Konfigurationswerte in einem relativ dichten Block am Anfang
des Scriptes in Variablen setzt und später im Programm nur
die Variablen nimmt.
Dadurch hat man viel einfachere Möglichkeiten, die Konfiguration
anzupassen.
 
Zurück
Oben