私は通常、.sh スクリプトで jsvc ランチャーを使用してデーモンとして実行する jar を持っています。ここで、いくつかのことを確認してコンソールに出力を返す必要がある新しいエントリ ポイントを作成したので、同じ .sh スクリプトで、パラメーターに基づいてデーモンまたは標準の Java アプリケーションとして実行するように切り替えました。sh は次のようになります。
#!/bin/sh
# Setup variables
EXEC=/usr/bin/jsvc
JAVA_HOME=/usr/lib/jvm/java-7-oracle
CLASS_PATH="./conf:/usr/share/java/commons-daemon.jar:./:./dist/core.jar"
do_exec()
{
$EXEC -home "$JAVA_HOME" -cp $CLASS_PATH $1 $CLASS
}
for i in `ls ./dist/lib/*.jar`
do
CLASS_PATH=${CLASS_PATH}:${i}
done
case "$1" in
start)
do_exec
;;
stop)
do_exec "-stop"
;;
check)
java -jar ./dist/core.jar check
;;
*)
echo "usage: daemon {start|stop|restart|check}" >&2
exit 3
;;
esac
私のcore.jarは、「チェック」フラグで開始された場合にのみcore.propertiesファイルを読み取ることができず、コードは次のとおりです。
public class Config {
private final static String RESOURCE_NAME = "core.properties";
private static Properties properties = null;
public static synchronized void init() {
if (properties != null) {
return;
}
try {
properties = new Properties();
properties.load(Config.class.getClassLoader().getResourceAsStream(RESOURCE_NAME)); <--- problematic line
} catch (Exception e) {
e.printStackTrace();
}
}
public static String get() {
...
}
}
例外は次のとおりです。
Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:434)
at java.util.Properties.load0(Properties.java:353)
at java.util.Properties.load(Properties.java:341)
at me.core.util.Config.init(Config.java:28)
at me.core.util.Config.get(Config.java:36)
at me.core.Main.checkCoreStatus(Main.java:55)
at me.core.Main.main(Main.java:33)
私のフォルダ構造はこれです:
root folder
|_ run.sh
|_ conf
|_ core.properties
|_ dist
|_ core.jar
|_ lib
|_ lib1.jar
|_ lib2.jar
|_ lib3.jar
|_ ....jar
|_ ....jar
私のjarマニフェストは次のとおりです。
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Administrator
Build-Jdk: 1.7.0_21
Main-Class: me.zenfeed.Main
Class-Path: ./conf/ ./dist/lib/junit-4.11.jar ./dist/lib/hamcrest-core-1.3.jar ....etc...
conf ディレクトリが含まれていることがわかりますが、./conf/ にそのディレクトリ内のすべてのファイルが含まれているかどうかはわかりません。プロパティ ファイルを標準の jar と同様にデーモンとして読み取り可能にするにはどうすればよいですか?
ありがとうございました