gpt4 book ai didi

java - 使用部署在 Oracle Weblogic 服务器上的 Java 代码时,数据泵目录中的 chmod 命令第二次不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 14:58:24 24 4
gpt4 key购买 nike

我正在尝试使用 expdp cmd 创建表 A_LOCKER 的 dmp 文件,然后通过 sftp 将其返回到部署了我的 java 代码的本地计算机。该服务器是一个 oracle weblogic 服务器。该代码第一次工作正常,但从第二次开始,它给出错误:权限被拒绝

dmp文件是在我创建的数据泵目录Extract中创建的。

现在我尝试通过 sftp 传输 dmp 文件,为此我需要为该文件提供 sudo 权限所以我在我的java代码中尝试了以下操作:1)创建 session :

    StringBuffer cmd = new StringBuffer();        

FileOutputStream fileOutputStream = null;

SshClient ssh = new SshClient();
SessionChannelClient session = null;
SftpClient sftp = null;


HostKeyVerification host = new IgnoreHostKeyVerification();

// Try to connect to the machine that includes the shared folder
// Throw an exception when a connection is failed.
try {
ssh.connect(machine, host);
} catch (IOException e) {


logger.error("Cannot connect to dbserver in machine "
+ machine,e);
throw new EPCShareFileException(
"Cannot connect to dbserver location in machine "
+ machine, e);
}


PasswordAuthenticationClient auth = new PasswordAuthenticationClient();
auth.setUsername(user);
auth.setPassword(password);
// Authenticate user name and password for connection
// Throw an exception if authentication is failed

try {
ssh.authenticate(auth);
} catch (IOException e) {
logger.error("Cannot authenticate user "
+ user + " " + " password " + password);
ssh.disconnect();

throw new EPCShareFileException("Cannot authenticate user "
+ user + " " + " password " + password, e);
}

2)使用伪权限执行chmod命令

                  cmd.append("/usr/local/bin/sudo /bin/chmod -R 777 ")
.append(location+dbDumpFileName);
try{
session = ssh.openSessionChannel();
session.executeCommand(cmd.toString());

} catch (IOException e){
logger.error("Cannot execute chmod cmd");
}
finally{
try {
session.close();
} catch (IOException e) {
// TODO Auto-generated catch block
logger.info("Cannot close the session:"+e.getMessage());
}

}

3)然后我尝试将 dmp 文件 sftp 到本地服务器

                   try {
sftp = ssh.openSftpClient();
} catch (IOException e) {
logger.error("Cannot open connection to database server");
ssh.disconnect();
throw new EPCShareFileException(
"Cannot open connection to database server");

}

try{
fileOutputStream = new FileOutputStream(dbDumpFileName);

sftp.get(location+dbDumpFileName, fileOutputStream);
}catch (IOException e) {
**throw new EPCShareFileException("Cannot retrive file "
+"Error:"+e.getMessage());**
}finally{
try {
fileOutputStream.close();
sftp.quit();
fileOutputStream = null;
sftp = null;

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

ssh.disconnect();
ssh = null;
}

当我第一次将代码作为ear文件部署在oracle weblogic服务器上时,它是工作文件,并且dmp文件也被创建并通过sftp传输到所需的位置但从第二次开始我收到错误: 错误:权限被拒绝

请帮忙..

最佳答案

首先,永远不要使用chmod -R 777 - 这就像向任何有权访问该机器的人发布您的数据,不问任何问题。如果您使用它来调试问题,那么好吧,但不要忘记将其更改回来(或摆脱它;您根本不需要它)。

要调试“权限被拒绝”错误,您需要有权访问计算机。在计算机上,您需要以出现错误的用户身份登录(不要尝试以 root 或其他用户身份登录)。

作为该用户,尝试访问您无法访问的路径中的每个文件夹。因此,如果 /srv/www/foo/bar/x/y/z/file.txt 失败,那么您需要

ls /srv
ls /srv/www/
ls /srv/www/foo/
ls /srv/www/foo/bar/
ls /srv/www/foo/bar/x/
ls /srv/www/foo/bar/x/y/
ls /srv/www/foo/bar/x/y/z/
ls /srv/www/foo/bar/x/y/z/file.txt

按照这个顺序进行。找到第一个失败的命令,然后检查为什么该用户没有相关文件夹的权限。

关于java - 使用部署在 Oracle Weblogic 服务器上的 Java 代码时,数据泵目录中的 chmod 命令第二次不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com