Archiv verlassen und diese Seite im Standarddesign anzeigen : Cronjob - JAVA_HOME nicht gesetzt
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
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.
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 könntest ein Script schreiben, welchen die Umgebung vorbereitet und dann das Programm startet und diese Script in den Cron packen...
mhh, geht es nur so kompliziert?
Kann ich nicht einfach irgendwie in der Konfig vom Cron angeben, was geladen wird bzw. die Umgebungsvariable setzen?
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...
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 :)
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.
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.
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.
Eine Login-Shell ist ab und an auch mal ganz nützlich
Das ist in diesem Fall wohl auch die eleganteste Methode.
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
aber man kann man-Pages lesen...
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
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
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.