2012-08-30 22 views
7

Bir Java hizmetini bir arka plan olarak başlatmak için jsvc'dan yararlanan bir uygulama yazıyorum. Uygulamam 1024'ün altındaki bağlantı noktalarını kullandığı için, jsvc gibi bir şey kullanmam gerekiyor, ancak oluşturduğunuz dosyaların başka bir kullanıcı tarafından sahiplenilmesi için root olarak çalıştırmama gerçekten çok istiyorum. Ayrıca, tüm müşteri gereksinimlerinin bir JVM ve jsvc ikili kurulu olduğu için bağımlılıkları ve yapılandırmayı en düşük düzeyde tutmak isterim. Bununla birlikte, jsvc'un büyük bir yakalamaya sahip olduğu görülmektedir; En azından elle JVM ev dizini ayarlayarak Ubuntu soruna geçici mümkün olmuşturJava evi bulunamıyor

$ ./startup.sh 
Cannot locate Java home 

: oldukça sinir bozucu verilen bir Unix işletim sistemi, üzerinde Java giriş klasörü tespit edemez:

jsvc ... -home /usr/lib/jvm/default-java/ ... 

Ben en çok Unixler/Linux dağıtımları arasında bu işi yapmak, böylece bir Bash komut dosyasından dinamik Java ev dizini belirlemek için herhangi bir yolu var mı? değil, her bir işletim sistemi için sabit kodlama daha ...

JAVA_HOME="$(...)" 

jsvc ... -home "$JAVA_HOME" ... 

: Ben böyle bir şey yaptığını geceleri çok daha iyi uyku mümkün olurdu. Bir java ikili verildiğinde, JVM/JRE'nin ana dizinini bulabilmemin bir yolu var mı? Java zaten $PATH açıksa Sadece çalışır ...

echo `dirname \`which java\`` 
JAVA_HOME=`dirname \`which java\`` 

:

+0

olası bir kopyası [Linux OpenJDK debian tabanlı dağıtım için JAVA_HOME envrionment değişkeninin doğru hedefi nedir?] (Http://stackoverflow.com/questions/663658/what-is-the-correct-target- java-home-envrionment-variable-for-a-linux-op için) – paulsm4

+1

Yinelenmez; Java'yı sadece Debian dağıtımları için değil, aynı zamanda Red Hat, OSX ve diğer Linux/Unixler için de jenerik olarak bulmaya çalışıyorum. –

+0

Lütfen SO bağlantısını okuyun. Özellikle "güncelleme-java-alternatives/update-alternatives" ile ilgili bölümler. – paulsm4

cevap

5

emin değilim.

+0

Teşekkürler, CentOS 6.5'te çalıştı :) –

0

Kullanım dirname ve which komutları Java'nın bin dizini bulmak için.

JAVA_HOME="$(readlink -f "$(which java)" | sed "s:bin/.*$::")" 

Ben Ubuntu üzerinde test ettik ve işe yarıyor, ancak OSX için çalışmaz: Bu * nixes genelinde çalışır, ancak bu çözümü bulursa

+1

Bu, şüphesiz (ve tekrarlanabilir) başarısız olan '/ usr/bin' döndürür. Hangi java '/ usr/bin/java'yı döndürdüğünden beri, bu benim elde ettiğim şey. –

3

İşte http://commons.apache.org/proper/commons-daemon//jsvc.html

adım prosedürü

İndir www.fightrice.com/mirrors/apache/commons/daemon benim adım ana jsvc sayfası olarak yerli Linux kaynağını derliyordu Çözümümün diyor /source/commons-daemon-1.0.13-src.tar.gz

Dosyayı açtıktan sonra ...../commons-daemon-1.0.13-src/src/native/unix adresine gidin.

Kök olarak terminalde

nedeniyle:

$ desteği/buildconf.sh

$ ./configure --with-java =/usr/lib/jvm/default-java $

testi jsvc ikili oluşturulan yapmak

Uygulamanın

çalışıyor $ ./jsvc -help

! temiz.

0

Bir başka yoludur:

type -p java 

bu doğru JAVA yükleme klasörünü dönmek için bekleyin.