Mad*_*iha 7 java bash file maven
商业模式有点复杂,如果解释不是100%明确,请原谅我:
Uploader接口(String upload(String path, byte[] fileContents))定义了上传文件(包含在字节数组中)的不同方法,例如AmazonUploader获取内容和path字符串,并在给定密钥下将其上传到Amazon S3.
我有一个LocalUploader在QA中使用的类,将给定的文件数组按原样写入本地磁盘.
上传器用于两种不同的情况:
webssh,经由用户root.命令行界面与Web界面不同,但它们都捆绑了Uploader.此外,命令行可执行文件是java -jar ....最后运行的bash脚本.
我们的想法是将文件保存到已知位置,然后通过简单的静态http服务器提供服务.
问题很简单:由于两个进程都写入同一个位置,当一个文件由命令行界面写入时,它不再web可以被Web界面写入(无法访问所创建的文件root,显然,其他方式没有问题)周围).
现在,我坚持使用Java 6 for Uploader,所以没有nio文件包.
java.io.File的.setWritable().如果我在写文件之前执行它,它会失败(返回false),如果我之后执行它,它返回true但不设置writable标志.su以另一个用户身份运行jar.但这与参数插入混淆umask,被Java迅速忽略.可能是因为它是一个不同的过程.@Override
public String upload(String path, byte[] fileContents) {
final File file = new File(path);
try {
FileUtils.writeByteArrayToFile(file, fileContents);
} catch (IOException e) {
throw new RuntimeException("Error writing file to path " + path, e);
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
#!/bin/bash
CONFIGDIR=${spring.config.location}
CONFIGFILE=$CONFIGDIR/${app.name}.conf
# Loading a settings from CONFIGFILE
[ -f $CONFIGFILE ] && source $CONFIGFILE
# Setting JAVA_BIN
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
# Starting the application
$JAVACMD $JAVA_OPTS -jar ${app.home}/bin/${build.finalName}.jar "$@" --spring.config.location=$CONFIGDIR/
Run Code Online (Sandbox Code Playgroud)
整个事情闻起来像一些琐碎的问题,首先不应该存在,但我很难过.非常感谢有关此事的任何帮助.
您尝试过使用 sudo 吗?
sudo -u web $JAVACMD $JAVA_OPTS -jar ${app.home}/bin/${build.finalName}.jar "$@" --spring.config.location=$CONFIGDIR/
Run Code Online (Sandbox Code Playgroud)
这应该可行,因为命令行界面是由以 root 身份登录的用户调用的(这是不推荐的,但我认为它是给定的)。
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |