写了一个java程序,程序启动时会读取和jar包统计目录的myapp.conf文件
在linux中通过java -jar myapp.jar的方式可以正常启动程序
但是在把命令加入到rc.local后却无法启动,查看日志发现是不能读取到myapp.conf文件
rc.local文件
#!/bin/sh
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
export JAVA_HOME=/usr/java/jdk1.7.0_71
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
java -jar /opt/agent/myapp.jar > /opt/agent/myapp.out 2>&1 &
是不是rc.local在执行java程序时会认为脚本所在目录为执行目录?
java读取文件的方法
public static String GetFile(String fileName){
String strContent = "";
try {
String strEncoder = GetEncoder(fileName);
BufferedReader biFile = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),strEncoder));
String strSingleLine;
while ((strSingleLine = biFile.readLine()) != null) {
strContent += strSingleLine;
strContent += "\n";
}
biFile.close();
}
catch (Exception e){
System.out.println(e.getLocalizedMessage());
}
finally {
return strContent;
}
}
各位帮忙看看应该怎么办?
PHP中文网2017-04-17 13:07:18
rc.local is scheduled by the init process. If you do not set the current directory, then when it is executed, the current directory is /
. It has nothing to do with the directory where 当前脚本(rc.local)
is located. Of course, there is no myapp.conf
file you need
Or you can add a sentence cd /path/to/jar
in rc.local
Or specify 绝对路径
巴扎黑2017-04-17 13:07:18
1. For the myapp.jar
program, can it accept parameters? Then execute the java -jar /opt/agent/myapp.jar /path/to/myapp.conf
command to specify the path to the configuration file, and then finally pass this path parameter to the GetFile
method.
Here’s the stupid way
2. Can you fix myapp.conf
to a path?
Then when calling the GetFile
(why not getFile) method, pass in the fixed path
巴扎黑2017-04-17 13:07:18
The variable CLASSPATH is no longer needed. Don’t be misled by the misleading information in China. This variable is added by default in JDK6 and later versions. It is not recommended to change it by yourself as it will cause various problems. Moreover, Java has the -cp parameter to temporarily add the classpath to run the program. This variable is no longer needed and should not be set during initialization.
The second problem is the relative path. Although it is convenient to use, it will be affected by the current directory. It is recommended that a robust solution is to let the program determine its own path, use its current directory as the basis, and splice relative paths into absolute paths.