2013-04-19 6 views
5

Sto cercando di ottenere un'applicazione Java per l'esecuzione come un servizio Linux che utilizza jsvc. Ho trovato How to convert a java program to daemon with jsvc? che è stato in grado di farmi ottenere la maggior parte del modo, ma sto ancora cercando di capire il percorso di classe.Utilizzo di più jar nel percorso classe jsvc

sto ottenendo i seguenti errori per 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

sembrerebbe che il runtime non è in grado di trovare il commons-daemon.jar.

La mia applicazione è strutturata in modo tale che con l'applicazione stessa in un singolo file jar, con dipendenze, tra cui il demone commons in una directory lib.

  • daemon-script.sh
  • myapp.jar
  • lib/Commons-daemon.jar
  • lib/altre-barattoli

Ecco le parti rilevanti della mia 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

Ho provato numerose varianti: percorso relativo, speci referenzia feticamente lib/commons-daemon.jar, nessun jolly, ecc. Qualcuno ha un'idea su come farlo funzionare correttamente?

Inoltre, myapp.jar è un vaso di auto-eseguibile (per lo più a scopo di test, e sì, ho ancora bisogno per eseguire come un servizio), in modo che il MANIFEST.MF contiene la classe-Path e Base- Attributi di classe C'è un modo per ottenere jsvc per riconoscere il manifest?

risposta

2

È possibile utilizzare più contenitori con JSVC utilizzando : tra di essi.

Per il vostro problema specifico la soluzione sarebbe cambiare la variabile CLASS_PATH a questo:

CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/commons-daemon.jar:$(pwd)/lib/other-jars 

In alternativa è possibile includere tutti i barattoli in una directory utilizzando i caratteri jolly in questo modo:

CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/*.jar 

Spero che questo aiuta

+0

Il mio chilometraggio variava usando jsvc 1.0.8 (su Ubuntu). jsvc non rispetterebbe i caratteri jolly o semplicemente specificando lib/dir. Invece, ho dovuto costruire il classpath esplicitamente usando "CLASS_PATH = $ (echo" $ LIB_PATH "/ *. Jar | tr '' ':')". Ho anche avuto un problema cercando di specificare -Dlog4j.configuration. Di solito specifichi solo un percorso assoluto al file delle proprietà, ma per farlo funzionare con jsvc, ho dovuto scriverlo come URL con il prefisso file: ///. Proverò presto anche su RHEL. – ayang

Problemi correlati