• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

ntpdate ausführen und Mail versenden

ich würde gerne ein ntpdate alle 3 Tage ausführen und wenn dieses erfolgreich durchgeführt wurde eine Mail versenden.
Klingt jetzt relativ einfach, dachte ich auch.

Also Script erstellt mit
Code:
#!/bin/sh
ntpdate de.pool.ntp.org | mail mailanmich@gmx.net -s Zeit_aktualisiert

postfix/sendmail läuft auf meinem server, wenn ich das Script per Commandline starte mit
./zeitscript
klappt das wunderbar. Das Script liegt unter /root/bin
In die Crontab vom user root eingetragen zum Testen mal alle 5 Min ausführen:

Code:
crontab -e -u root

*/5 * * * * /root/bin/zeitscript


bekomme ich einen Fehler und zwar

Code:
From root@server.de  Fri Jan  1 17:24:02 2010
X-Original-To: root
Delivered-To: root@server.de
From: root@server.de
To: root@server.de
Subject: Cron <root@server> /root/bin/zeitscript
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Fri,  1 Jan 2010 17:24:01 +0100 (CET)

/root/bin/zeitscript: line 12: ntpdate: command not found

warum kennt nun das System den Befehl ntpdate nicht, obwohl manuell das Script funktioniert?
 
OP
F

fritzbee21

Hacker
hm ich habe den Pfad aber nicht festgelegt, d.h. wüßte ich auch nicht wo ich diesen angeben soll?

Ich hatte vorher ein Script ohne Mailfunktion am laufen, allerdings wurde die Uhr nie gestellt obwohl das Script ausgeführt wurde. Deswegen die Mailoption um mal zu sehen was da passiert.
 

josef-wien

Ultimate Guru
Ich meinte den Pfad zum Programm ntpdate in Deinem Skript.

Hast Du ntp entsprechend konfiguriert? Bei openSUSE gibt es die Dokumentation im Paket ntp-doc, weitere Informationen gibt es unter http://www.linupedia.org/opensuse/Uhrzeit, Fragen zu ntp gehören ins Forum http://www.linux-club.de/viewforum.php?f=45.
 
A

Anonymous

Gast
Ich weiß jetzt hier nicht, wie oft wir im Forum hier schon darauf hingewiesen haben, gefühlte 36000 Mal, aber mindestens in jedem 2. Thread in dem auch das Wort "cron" vorkommt.
Noch mal: Wenn ihr euch am Rechner anmeldet durchläuft die Anmeldeshell beim Login immer eine Prozedur bei der die Umgebungs-Variablen für die Shell gesetzt werden und die meisten davon auch exportiert werden. Also immer schon vorher da sind, wenn ihr manuell einen Befehl absetzt. sehen würdet ihr was da an Variablen und Shellfunktionen alles gesetzt ist, wenn ihr euch mal die Ausgabe von "set" auf der Konsole anschaut. Dazu kommen dann in verschiedenen Shells auch noch aliase.

Bei einem Cronjob gibt es diese Initialisierung der Shell nicht, desshalb gibt es dort nur eine Handvoll Umgebungsvariablen. Eine der wichtigsten ist PATH mit ihrer Hilfe werden von der Shell ausführbare Dateien in diesen Verzeichnissen gesucht, wenn sie nicht mit komplettem Path angegeben werden. Ihr seit von der Shell immer sowas hier gewohnt
Code:
# echo $PATH
/sbin:/usr/sbin:/usr/local/sbin:/opt/kde3/sbin:/opt/gnome/sbin:/root/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/jvm/jre/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/lib/qt3/bin
in Cronjobs sieht das aber so aus
Code:
echo $PATH
/usr/bin:/bin
uU ist PATH auch konfigurationsbedingt ganz leer. Daraus folgt zwangsläufig, in Cronjobs und Scripten die innerhalb von Cronjobs gestartet werden, alle Programme und Scripte mit vollem Path angeben oder in den Scripten zuerst eine Umgebung manuell setzten.

robi
 
Oben