Ich versuche, eine Java-Anwendung als Linux-Dienst mit jsvc auszuführen. Ich fand How to convert a java program to daemon with jsvc?, die mir den größten Teil des Weges bringen konnte, aber ich kämpfe immer noch darum, den Klassenpfad herauszufinden.Mehrere Jars im Jsvc-Klassenpfad verwenden
Ich erhalte die folgenden Fehler auf stderr:
19/04/2013 10:43:18 12233 jsvc.exec error: Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader
19/04/2013 10:43:18 12231 jsvc.exec error: Service exit with a return value of 1
Es scheint, dass die Laufzeit nicht in der Lage ist, die commons-daemon.jar zu finden.
Meine Anwendung ist so strukturiert, dass mit der Anwendung selbst in einer einzigen JAR-Datei, mit Abhängigkeiten, einschließlich Commons-Daemon in einem Lib-Verzeichnis.
- daemon-script.sh
- myapp.jar
- lib/commons-daemon.jar
- lib/other-Gläser
Hier sind die jeweiligen Teile meines daemon- script.sh:
LIB_DIR=$(pwd)/lib/*
CLASS_PATH=$(pwd)/myapp.jar
$EXEC -home $JAVA_EXEC -cp $CLASS_PATH:$LIB_DIR -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS
Ich habe zahlreiche Variationen ausprobiert: relativer Pfad, speci auf lib/commons-daemon.jar verweisen, kein Wildcard, etc. Hat jemand eine Idee wie man das richtig macht?
Auch myapp.jar ist eine selbst-ausführbare jar (meist zu Testzwecken, und ja, ich brauche es immer noch als Dienst ausführen), so dass die manifest.mf enthält die Klassen-Pfad und Main- Klassenattribute Gibt es eine Möglichkeit, jsvc dazu zu bringen, das Manifest zu erkennen?
Meine Laufleistung variiert mit jsvc 1.0.8 (Ubuntu). jsvc würde die Platzhalter nicht berücksichtigen oder einfach die lib/dir angeben. Stattdessen musste ich den Klassenpfad explizit mit "CLASS_PATH = $ (echo" $ LIB_PATH "/ *. Jar | tr '' ':')" konstruieren. Ich lief auch in einen Haken, der versucht, -Dlog4j.configuration anzugeben. Normalerweise gebe ich nur einen absoluten Pfad zur Eigenschaftendatei an, aber um es mit jsvc zu arbeiten, musste ich es als URL mit dem Präfix file: /// schreiben. Ich werde bald auf RHEL testen. – ayang