PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shell - Anfängerfrage



rfi
02-08-2002, 14:16
Hi,

ich quäle mich jetzt schon stundenlang mit einem kleinen shellscript herum, welches mir automatisch einen Datenbankdump erstellen soll. Führe ich es direkt aus der shell heraus aus, klappt es, führe ich es über crontab aus, klappt es nicht!

mydump sieht so aus:

#! /bin/sh
/opt/oracle/product/oracle/bin/exp user-xy/passwort-xy@mydb parfile=/etc/exportall
exit 0

Also das binary exp wird mit zwei Parametern aufgerufen.

./mydump funktioniert auch einwandfrei.


Rufe ich mydump über crontab auf, tut sich NICHTS!
*/5 * * * * /etc/myscrpts/mydump

Crontab wird korrekt alle 5 Minuten ausgeführt. Habe ich überprüft.
Kann mir jemand erklären, wieso das Script überhaupt nicht ausgeführt wird? Keine Meldung auf dem Bildschirm und keine Fehlermeldung in /var/log/messages. Einfach nix.

Danke für Tipps
rfi

fork
02-08-2002, 14:42
Das soll nicht etwa "/etc/myscripts/mydump" heissen?

Mach halt einfach mal einen

echo $(date): hallo >>/tmp/bla.log

in dein Script rein um zu sehen ob es ausgeführt wird

rfi
02-08-2002, 16:14
Hi fork,

ja richtig. Ein Schreibfehler, der aber nichts mit dem Script selbst zu tun hat. Das Script wird ausgeführt. Aber die Befehlszeile nicht.

Grüße
rfi

anda_skoa
02-08-2002, 16:21
Könnte auch ein Schreibfehler sein, aber zwischen ! und / scheint ein Leerzeichen zu sein

Ciao,
_

rfi
02-08-2002, 16:31
Stimmt! Aber das macht nichts aus. Script wird in beiden Fällen ausgeführt oder auch nicht ausgeführt.

Grüße
rfi

rfi
02-08-2002, 17:21
Ich kenne jetzt die Ursache. Das binary exp ist abhängig von einigen Umgebunsvariablen, die die login-shell kennt. Schreibe ich diese Umgebungsvariablen (incl. export) in das Script, so klappt alles.

Nun die entscheidende Frage: Warum kennt eigentlich die shell eines root-cronjobs die Umgebungsvariablen seiner Eltern nicht. Ich dachte, die aufgerufene shell erbt die Variablen der aufrufenden shell. Oder startet cron irgendwie "neutral"?

Oder liege ich völlig falsch?
rfi

fork
02-08-2002, 20:26
Ich weiss das leider nicht aber das kann sein das es keine loginshell ist, steht bestimmt in der man-page von cron. Du kannst aber die Initialisierungsdateien auch sourcen. Das heist du führst diese mit dem Punktkommando aus:



. /etc/profile
. $HOME/.profile

# Programmstart
...
...

rfi
03-08-2002, 15:57
Hi fork,

..ähm das raff ich nicht so ganz, wie du das meinst. Kannst du mir das "sourcen" an einem Beispiel kurz klar machen?

Danke
rfi

anda_skoa
03-08-2002, 16:18
Er hat doch schon ein Beispiel angegeben :)

Du schreibst Punkt Leerzeichen Scriptname

zb



. /etc/profile


Dann wird das angegeben Script in das aktuelle eingelesen, die darin enthaltenen Definitionen sind dann auch im aktuellen Script sichtbar.

Ciao,
_

rfi
05-08-2002, 18:01
Hi fork und anda_skoa,

Der Tipp mit dem "sourcen" hat gepasst! Funktioniert sehr gut

Danke
rfi