linux - bash执行java程序时读取文件问题
PHP中文网
PHP中文网 2017-04-17 13:05:18
0
3
638

写了一个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中文网
PHP中文网

认证0级讲师

reply all(3)
Ty80

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 绝对路径

of myapp.conf file in java code
巴扎黑

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

巴扎黑

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.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template