Cronjob + Java
Cronjob + Java
Hi,
wieder ich
Ums kurz zu machn, ich moechte per CronJob meine java "programm" starten.
Problem: Cron moechte das nicht
Ja.. was tun?
Der Befehl "java" alleine kennt er gar nicht. und wenn ich /opt/java/bin/java mache bekomm ich nur ne fehlermeldung, wobei das Programm laeuft wenn ich es so in die konsole tippe.
Jemand ne idee?
Danke
Sven
wieder ich
Ums kurz zu machn, ich moechte per CronJob meine java "programm" starten.
Problem: Cron moechte das nicht
Ja.. was tun?
Der Befehl "java" alleine kennt er gar nicht. und wenn ich /opt/java/bin/java mache bekomm ich nur ne fehlermeldung, wobei das Programm laeuft wenn ich es so in die konsole tippe.
Jemand ne idee?
Danke
Sven
System
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6
Ich habs geahnt
War nur zu faul
ne.. also hier kommt sie
War nur zu faul
ne.. also hier kommt sie
Ausgabe des Befehls cd /home/sven/CheckMail ; /opt/java/bin/java mail ...
Exception in thread "main" java.lang.NoClassDefFoundError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
at sun.awt.motif.MToolkit.<clinit>(MToolkit.java:81)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at java.awt.Toolkit$2.run(Toolkit.java:748)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:739)
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at javax.swing.LookAndFeel$1.createValue(LookAndFeel.java:274)
at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:181)
at javax.swing.UIDefaults.get(UIDefaults.java:126)
at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:44)
at javax.swing.UIDefaults.getIcon(UIDefaults.java:407)
at javax.swing.UIManager.getIcon(UIManager.java:537)
at javax.swing.plaf.basic.BasicOptionPaneUI.getIconForType(BasicOptionPaneUI.java:557)
at javax.swing.plaf.basic.BasicOptionPaneUI.getIcon(BasicOptionPaneUI.java:543)
at javax.swing.plaf.basic.BasicOptionPaneUI.createMessageArea(BasicOptionPaneUI.java:313)
at javax.swing.plaf.basic.BasicOptionPaneUI.installComponents(BasicOptionPaneUI.java:154)
at javax.swing.plaf.basic.BasicOptionPaneUI.installUI(BasicOptionPaneUI.java:122)
at javax.swing.JComponent.setUI(JComponent.java:449)
at javax.swing.JOptionPane.setUI(JOptionPane.java:1693)
at javax.swing.JOptionPane.updateUI(JOptionPane.java:1715)
at javax.swing.JOptionPane.<init>(JOptionPane.java:1678)
at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:828)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:642)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:613)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:584)
at mail.main(mail.java:7)
System
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6
- suntsu
- Beiträge: 2947
- Registriert: 03.05.2002 10:45:12
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: schweiz
-
Kontaktdaten:
Ein hilft weiter.
Ich würde einfach mal probieren.
Bei "normalem" ausführen von Java spielt der Classpath seit java1.2 imo keine Rolle mehr. Ich weis ned wie das bei cron genau aussieht.
Must halt bescheid sagen ob es geht
gruss
manuel
edit:
Zudem kann ich dir noch dieses Buch empfelen. http://www.galileocomputing.de/openbook ... #Xxx537584
Code: Alles auswählen
java -help
Ich würde einfach mal
Code: Alles auswählen
java -classpath /dort/wo/dein/javafile/liegt
Bei "normalem" ausführen von Java spielt der Classpath seit java1.2 imo keine Rolle mehr. Ich weis ned wie das bei cron genau aussieht.
Must halt bescheid sagen ob es geht
gruss
manuel
edit:
Zudem kann ich dir noch dieses Buch empfelen. http://www.galileocomputing.de/openbook ... #Xxx537584
Zuletzt geändert von suntsu am 11.12.2003 23:17:07, insgesamt 1-mal geändert.
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
Ich vermute auch ein Classpath-Problem. Unter welchem User wird der Cron-Job ausgeführt? Ich vermute, wenn du das Programm von Hand ausführst, dann ist dei Classpath-Variable schon im Environment gesetzt. Der Cron-Job bekommt davon nichts mit.
Schau mal mit ob einer gesetzt ist. Wenn ja, dann musst du den Aufruf im Cron-Job mit anpassen.
Grüße, Marco
Schau mal mit
Code: Alles auswählen
set | grep CLASSPATH
Code: Alles auswählen
java -cp lib1.jar:...:libN.jar package.klasse
Grüße, Marco
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
Hä? Seit wann denn das? Hab ich was verpasst? Was meinst du mit "normalem Ausführen"? Die benötigten Bibliotheken und Klassen müssen immer noch ordentlich im Classpath stehen.suntsu hat geschrieben:Bei "normalem" ausführen von Java spielt der Classpath seit java1.2 imo keine Rolle mehr.
Grüße, Marco
- suntsu
- Beiträge: 2947
- Registriert: 03.05.2002 10:45:12
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: schweiz
-
Kontaktdaten:
Das denke ich auch. Normalerweise ist ja der classpath schon mit dem . (punkt) auf das aktuelle Verzeichniss gesetzt. Aba ich weis halt wie gesagt nicht wie sich da der cron verhällt.emge hat geschrieben:Ich vermute auch ein Classpath-Problem. Unter welchem User wird der Cron-Job ausgeführt? Ich vermute, wenn du das Programm von Hand ausführst, dann ist dei Classpath-Variable schon im Environment gesetzt. Der Cron-Job bekommt davon nichts mit.
Grüße, Marco
gruss
ps: Jetzt ist bei mir "Webanwendungen entwickeln mit Oracle9i" eingetroffen, mal sehen ob es hilft
lol, ihr beide seid heute abend aber gut drauf, ne?emge hat geschrieben:Hä? Seit wann denn das? Hab ich was verpasst? Was meinst du mit "normalem Ausführen"? Die benötigten Bibliotheken und Klassen müssen immer noch ordentlich im Classpath stehen.suntsu hat geschrieben:Bei "normalem" ausführen von Java spielt der Classpath seit java1.2 imo keine Rolle mehr.
Grüße, Marco
System
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6
- suntsu
- Beiträge: 2947
- Registriert: 03.05.2002 10:45:12
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: schweiz
-
Kontaktdaten:
Ich zitiere nur von Büchern *g*emge hat geschrieben:Hä? Seit wann denn das? Hab ich was verpasst? Was meinst du mit "normalem Ausführen"? Die benötigten Bibliotheken und Klassen müssen immer noch ordentlich im Classpath stehen.suntsu hat geschrieben:Bei "normalem" ausführen von Java spielt der Classpath seit java1.2 imo keine Rolle mehr.
Grüße, Marco
grussjava ist auch eine Insel hat geschrieben:Als Parameter für den Interpreter wird der Name der Klasse übergeben, die eine main()-Funktion enthält und somit als ausführbar gilt. Der Dateiname ist daher auch nicht mit der Endung »class« zu versehen, denn es gibt keine Klasse mit dem Namen Quadrat.class. Scheitert die Ausführung des Programms an dem Problem, dass die Klasse nicht verfügbar ist, so muss möglicherweise in die Umgebungsvariable CLASSPATH der Punkt (das aktuelle Verzeichnis) mit aufgenommen werden. Ab dem SDK 1.2 ist der CLASSPATH allerdings für die Standardausführung nicht nötig und sollte besser gar nicht gesetzt werden.
manuel
edit:
Mit "normalem" ausführen meinte ich java Classe, wie schon geschreiben habe ich keinen schimmer wie sich cron da verhält.
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
Aha. Stimmt.suntsu hat geschrieben:Ich zitiere nur von Büchern *g*emge hat geschrieben:Hä? Seit wann denn das? Hab ich was verpasst? Was meinst du mit "normalem Ausführen"? Die benötigten Bibliotheken und Klassen müssen immer noch ordentlich im Classpath stehen.suntsu hat geschrieben:Bei "normalem" ausführen von Java spielt der Classpath seit java1.2 imo keine Rolle mehr.
Grüße, Marco
grussjava ist auch eine Insel hat geschrieben:Als Parameter für den Interpreter wird der Name der Klasse übergeben, die eine main()-Funktion enthält und somit als ausführbar gilt. Der Dateiname ist daher auch nicht mit der Endung »class« zu versehen, denn es gibt keine Klasse mit dem Namen Quadrat.class. Scheitert die Ausführung des Programms an dem Problem, dass die Klasse nicht verfügbar ist, so muss möglicherweise in die Umgebungsvariable CLASSPATH der Punkt (das aktuelle Verzeichnis) mit aufgenommen werden. Ab dem SDK 1.2 ist der CLASSPATH allerdings für die Standardausführung nicht nötig und sollte besser gar nicht gesetzt werden.
manuel
edit:
Mit "normalem" ausführen meinte ich java Classe, wie schon geschreiben habe ich keinen schimmer wie sich cron da verhält.
Aber nur, wenn du den Classpath nicht noch beim Aufruf mit angeben musst. Dann wird der implizit gesetze Classpath (aktuelles Verzeichnis) nicht mit gesetzt. Muss dann also "per Hand" wieder angefügt werden.
Die allgemeingülte und immer funktionierende Variante ist dann doch wieder, immer den Classpath beim Aufruf mit zu setzen (erfahrungsgemäss braucht man sowieso immer noch irgendwelche Bibliotheken). Dann funktioniert das auch mit dem Cron-Job.
Grüße, Marco
unter User "sven"emge hat geschrieben:Ich vermute auch ein Classpath-Problem. Unter welchem User wird der Cron-Job ausgeführt? Ich vermute, wenn du das Programm von Hand ausführst, dann ist dei Classpath-Variable schon im Environment gesetzt. Der Cron-Job bekommt davon nichts mit.
Schau mal mitob einer gesetzt ist. Wenn ja, dann musst du den Aufruf im Cron-Job mitCode: Alles auswählen
set | grep CLASSPATH
anpassen.Code: Alles auswählen
java -cp lib1.jar:...:libN.jar package.klasse
Grüße, Marco
so... ich probier das mit den classpath morgen mal aus, muss jetzt ins bett
aber ich sach schonmal danke
gn8
sven
System
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6
Debian 4.0 "Etch"
Kernel 2.6.18
Gnome 2.6