2016-08-31 4 views
1

Ich versuche, einen Cronjob (cPanel) einzurichten, die eine Shell-Datei ausführen, die Java-Anwendung ausführen wird. Allerdings kann ich den Klassenpfad nicht zur Arbeit bringen.Linux-Befehl läuft JAVA mit Cronjob

JAVA Ordner Anwendungspfad

/home/user/public_html/version_1/data/downloader 

Dieser Befehl innerhalb .Sh Datei arbeiten, wenn sie durch Terminal und in der JAVA-Anwendungsordner

java -cp .:download.jar:log4j.jar:commons-httpclient.jar:commons-fileupload.jar:commons-logging.jar:commons-codec.jar:JAxe-1.0.jar portal.client.Main login 

jedoch ausgeführt, wenn außerhalb des Ordners läuft es doens't Arbeit und gibt den folgenden Fehler zurück

Error: Could not find or load main class portal.client.Main 

so versuche ich spezifische Klassenpfad

java -cp /home/user/public_html/version_1/data/downloader/*:.download.jar:log4j.jar:commons-httpclient.jar:commons-fileupload.jar:commons-logging.jar:commons-codec.jar:JAxe-1.0.jar th.or.set.portal.client.Main login 

Es ist immer noch Fehler zeigt

log4j:ERROR Could not read configuration file [log4j.properties]. 
java.io.FileNotFoundException: log4j.properties (No such file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:146) 
    at java.io.FileInputStream.<init>(FileInputStream.java:101) 
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297) 
    at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315) 
    at portal.client.Main.main(Main.java:32) 
log4j:ERROR Ignoring configuration file [log4j.properties]. 
log4j:WARN No appenders could be found for logger (portal.controller.MainController). 
log4j:WARN Please initialize the log4j system properly. 
Exception in thread "main" java.lang.IllegalArgumentException: InputStream cannot be null 
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:117) 
    at portal.client.DownloadParameter.parseLoginParam(DownloadParameter.java:177) 
    at portal.controller.MainController.execute(MainController.java:45) 
    at portal.client.Main.main(Main.java:130) 
+1

Sie führen den Code in einem falschen Verzeichnis – Jens

+0

anzeigen Der Code um 'at portal.client.DownloadParameter.parseLoginParam (DownloadParameter.java:177)' – talex

Antwort

2

Well. Sie müssen das Arbeitsverzeichnis ändern. Sie können es tun, einfach durch cd

cd /home/user/public_html/version_1/data/downloader/ 
java -cp .:download.jar:log4j.jar:commons-httpclient.jar:commons-fileupload.jar:commons-logging.jar:commons-codec.jar:JAxe-1.0.jar portal.client.Main login 
-1

mit Haben Sie versucht, ein Skript erstellen Ihre Umgebung einzurichten und dann Java-Programm feuern?

Ihr Skript würde in etwa so aussehen:

#!/bin/sh 
export CLASSPATH=<paths to files> 
java <your program> 

Sie können Ihr Skript in die crontab dann fallen lassen und so viel mit ihm drehen, wie Sie möchten, ohne Ihren Eintrag aktualisieren zu müssen.

+0

Wie hilft es, das Problem mit der Datei zu beheben, die im aktuellen Verzeichnis fehlt? – talex

+0

es hilft, weil es ermöglicht, das Skript geändert werden, ohne mit der Crontab ständig Unordnung – djb

-1

Sie können den Klassenpfad in der Manifest-Datei Ihrer JAR-Paket gesetzt

Manifest-Version: 1.0 
Implementation-Title: myapp 
Implementation-Version: 1.0.1 
Class-Path: lib/dep1.jar lib/dep2.jar 

dann können Sie Ihre JAR-Datei ausführen, ohne zusätzliche Argumente zu übergeben

+0

Es wird nicht beheben Problem mit Datei im aktuellen Verzeichnis gesucht wird nicht gefunden? – talex

+0

@talex Warum wird der Pfad von log4j.properties im Klassenpfad nicht das Problem beheben? – Amir

+0

Weil das Hauptproblem 'Exception in thread 'main ist" java.lang.IllegalArgumentException: InputStream kann nicht null sein "was ich vermute, ist ein falscher Dateipfad. – talex