PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cronjob - JAVA_HOME nicht gesetzt



oetzi83
15.09.09, 10:21
Hallo zusammen,

ich habe hier ein Skript vorliegen, was unter anderem java Klassen aufruft.
Dafür muss logischerweise JAVA_HOME gesetzt sein.

Wenn ich es per Hand ausführe läuft es auch wunderbar, da es allerdings täglich ausgeführt werden soll, möchte ich es als Cronjob anlegen.

Das anlegen war ja kein Problem, aber ich sehe jetzt, nachdem ich die Ausgabe pipe, dass es meckert, dass JAVA_HOME nicht gesetzt sei.

Mir fehlt jetzt einfach das Verständnis, wie sowas passieren kann. Was macht crontab anders, als ich über die shell?

Wäre für Hilfe sehr dankbar!

Grüße
oetzi

marce
15.09.09, 10:24
das Environment ist anders - in einer Loginshell werden jede Menge Dateien zusätzlich gesourced.

Du musst also dafür sorgen, daß die entsprechenden Einträge auch in der Cron-Umgebung verfügbar sind.

oetzi83
15.09.09, 13:18
ok, wäre es möglich mir noch zu sagen, wie ich das mache?
Bin ja froh, dass ich mittlerweile mit Linux ganz gut durch den Alltag komme, aber zu den Pro's gehöre ich defintiv noch nicht :rolleyes:

marce
15.09.09, 13:25
Du könntest ein Script schreiben, welchen die Umgebung vorbereitet und dann das Programm startet und diese Script in den Cron packen...

oetzi83
15.09.09, 13:58
mhh, geht es nur so kompliziert?
Kann ich nicht einfach irgendwie in der Konfig vom Cron angeben, was geladen wird bzw. die Umgebungsvariable setzen?

marce
15.09.09, 14:00
klar, geht auch - nur dann gilt das für jeden Cronjop. Und ob man das haben will - ok, Deine Entscheidung.

Zusätzlich sind evtl. Befehle vom jeweils verwendeten Cron abhängig...

asi_dkn
15.09.09, 15:12
ich würde dir auch empfehlen einen kleinen wrapper zu schreiben. das ist ein ganz einfaches shell script und wirklich "kompliziert" ist das auch nicht. ausserdem lernt man ja auch immer etwas dabei. so gesehen schon den doppelten vorteil :)

oetzi83
15.09.09, 15:17
ja ok, wobei es ja kein Problem sein sollte, wenn alle cronjobs eine JAVA_HOME variable haben.

aber ok, wie sähe so ein skript denn aus?
reicht da einEeinzeiler in Richtung:
export JAVA_HOME=/bla... ?

Und dieses Skript würde ich einfach vor dem anderen ausführen und die Variable bleibt gesetzt? Oder muss ich das export vielleicht in das bestehende Skript übernehmen. Das wäre eigentlich unschön.

reno
15.09.09, 16:54
Hi oetzi83,

du hast leider nicht geschrieben, welche Distro du benutzt. Bei Slackware ist es jedenfalls so, dass während der Installation des JRE-Paketes entsprechende Skripte nach /etc/profile.d kopiert werden, durch die entsprechende Umgebungsvariablen gesetzt werden. Die Skripte in /etc/profile.d werden beim Systemstart durch /etc/profile ausgeführt, so dass die Umgebungsvariablen dann für alle User gesetzt sind.


ja ok, wobei es ja kein Problem sein sollte, wenn alle cronjobs eine JAVA_HOME variable haben.

aber ok, wie sähe so ein skript denn aus?
reicht da einEeinzeiler in Richtung:
export JAVA_HOME=/bla... ?

Und dieses Skript würde ich einfach vor dem anderen ausführen und die Variable bleibt gesetzt? Oder muss ich das export vielleicht in das bestehende Skript übernehmen. Das wäre eigentlich unschön.
Du kannst es auch so machen, dass der Cronjob ein Shellscript aufruft, welches erst die Variable(n) exportiert und dann deine Javaklassen startet.

Aqualung
15.09.09, 19:25
Eine Login-Shell ist ab und an auch mal ganz nützlich:

/etc/crontab:

* * * * * /bin/bash -ls -c /usr/bin/env >> /tmp/cron_env.log 2>&1

Sollte im log das normale Environment vom user root ergeben.

reno
16.09.09, 09:24
Eine Login-Shell ist ab und an auch mal ganz nützlich
Das ist in diesem Fall wohl auch die eleganteste Methode.

oetzi83
16.09.09, 10:41
Hallo,
dank euch schonmal für die Antworten!!

Es ist übrigens ein SLES10.

Ähm, was macht denn dieser Befehl genau?
Könnte mir das jemand erklären? Nach Sonderzeichen kann man auch so schlecht googlen ;)

* * * * * /bin/bash -ls -c /usr/bin/env >> /tmp/cron_env.log 2>&1

marce
16.09.09, 10:43
aber man kann man-Pages lesen...

oetzi83
16.09.09, 11:47
was denn für ne man page?
man >>
man 2>&1
irgendwie kommt da nichts... :rolleyes:

Für jemanden der sich auskennt, wäre das bestimmt ein sehr geringer Aufwand mir zu erklären, was der ganze Befehl bewirkt. Sicherlich nicht mehr Aufwand als solch einen sinnfreien Kommentar zu schreiben...

/bin/bash -ls
--> ruft eine Loginshell auf. Soweit ist es klar, aber beim Rest verstehe ich nicht, was es bewirkt.

Gruß
oetzi

drcux
16.09.09, 11:51
Nach Sonderzeichen kann man auch so schlecht googlen ;)

http://www.google.de/search?q=%222%3E%261%22&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a

marce
16.09.09, 11:52
steht alles in der man-Page zu bash.

Und Google (http://www.google.de/search?q=2%3E%261&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a)findet zu den anderen Dingen auch sofort etwas...

*hmpf*

Rain_maker
16.09.09, 11:52
was denn für ne man page?i

Anbieten würden sich:



man cron

man env

man bash

core
16.09.09, 14:53
Leute, ihr macht das alles ganz schön kompliziert (unnötig),


ok, wäre es möglich mir noch zu sagen, wie ich das mache?
Bin ja froh, dass ich mittlerweile mit Linux ganz gut durch den Alltag komme, aber zu den Pro's gehöre ich defintiv noch nicht :rolleyes:

Du schreibst ganz einfach in deine Crontab oben JAVA_HOME=/foo hinein.
Damit ist die Variable gesetzt.

Also z.B. so..

JAVA_HOME=/maus
# m h dom mon dow command
3 6 * * * /foo/bar