Java 通过shell脚本运行jar文件时出现Linux-IO异常

Java 通过shell脚本运行jar文件时出现Linux-IO异常,java,linux,shell,Java,Linux,Shell,我正在使用Debain 8.0-jessie(64位) 当我试图通过shell脚本从jar文件的目录外运行jar文件时,会出现IO异常 目录:“/home/rscedit” 文件:“数据(目录)”“run.sh(文件)”“Webserver.jar(文件)” 当我尝试从“/home/rscedit”之外的任何地方运行“run.sh”时,我的jar文件中会遇到IO异常 但是如果我尝试从“/home/rscedit”运行“run.sh”,它运行得非常好 我想在启动时运行shell脚本,所以我应该能够

我正在使用Debain 8.0-jessie(64位)

当我试图通过shell脚本从jar文件的目录外运行jar文件时,会出现IO异常

目录:“/home/rscedit”

文件:“数据(目录)”“run.sh(文件)”“Webserver.jar(文件)”

当我尝试从“/home/rscedit”之外的任何地方运行“run.sh”时,我的jar文件中会遇到IO异常

但是如果我尝试从“/home/rscedit”运行“run.sh”,它运行得非常好

我想在启动时运行shell脚本,所以我应该能够从“/home/rscedit”外部运行shell脚本,对吗

Shell脚本

#!/bin/sh
java -jar -Xmx20480m /home/rscedit/Webserver.jar
read –n1
java.nio.file.NoSuchFileException: ./data/log/ipn.log.lck
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:177)
        at java.nio.channels.FileChannel.open(FileChannel.java:287)
        at java.nio.channels.FileChannel.open(FileChannel.java:335)
        at java.util.logging.FileHandler.openFiles(FileHandler.java:459)
        at java.util.logging.FileHandler.<init>(FileHandler.java:326)
        at org.displee.utilities.logging.LogFactory.loadFileLogger(LogFactory.java:44)
        at org.displee.utilities.logging.LogFactory.<clinit>(LogFactory.java:19)
exec /home/rscedit/run.sh
执行shell脚本时出现的错误

#!/bin/sh
java -jar -Xmx20480m /home/rscedit/Webserver.jar
read –n1
java.nio.file.NoSuchFileException: ./data/log/ipn.log.lck
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileSystemProvider.newFileChannel(UnixFileSystemProvider.java:177)
        at java.nio.channels.FileChannel.open(FileChannel.java:287)
        at java.nio.channels.FileChannel.open(FileChannel.java:335)
        at java.util.logging.FileHandler.openFiles(FileHandler.java:459)
        at java.util.logging.FileHandler.<init>(FileHandler.java:326)
        at org.displee.utilities.logging.LogFactory.loadFileLogger(LogFactory.java:44)
        at org.displee.utilities.logging.LogFactory.<clinit>(LogFactory.java:19)
exec /home/rscedit/run.sh

编辑:我的数据映射不仅包含日志文件,还包含其他内容,如网站文件。

您的java程序似乎对工作目录很敏感。我知道的最简单的解决办法,改变这个

java -jar -Xmx20480m /home/rscedit/Webserver.jar

,更改Java,这(以及所有模式)

例如(使其相对于
$HOME


当linux试图在后台运行我的shell脚本时,这也会起作用吗?@dispree Yes。但我增加了另一个选择;这是为了使您的路径相对于
user.home
(而不是硬编码相对路径)。我建议您像真正的日志框架那样,为这些文件路径和日志定义创建一个单独的配置文件。或者如果这太多,只需登录到stdout/stderr并在启动时重定向它们。是的,我也尝试过,但您还需要在数据映射中找到日志配置文件,这会导致相同的问题。我的数据地图包含更多的东西,比如网站文件,而不仅仅是日志文件。
loadFileLogger("ipn", new File(System.getProperty("user.home"), 
        "data/log/ipn.log").getPath());
loadFileLogger("error", new File(System.getProperty("user.home"), 
        "data/log/error.log").getPath());