使用 java processbuilder 删除 cassandra 密钥空间



我有一个清理外壳脚本,旨在删除除系统密钥空间之外的所有 cassandra 密钥空间。我能够使用 java 进程构建器执行 shell 脚本,但我的脚本指向错误的 cqlsh.py 位置(自动添加 D: 驱动器号(

注意 - 我的项目工作区位于D:窗口操作系统的驱动器

cleanup.sh 文件 --

#!/bin/bash
hostname=$1
echo "---------------------------"
echo "   Clearing Cassandra with keyspaces"
echo "---------------------------"
echo -e "nGet a list of all keyspaces that doesn't contain system prefix"
keyspaces=$(echo desc keyspaces | cqlsh $hostname | xargs -n1 echo | grep -v ^system)
echo -e "nDropping all keyspaces that doesn't contain system prefix..."
for ks in $keyspaces; do
echo "drop keyspace $ks;" | cqlsh $hostname
#echo Dropped "$ks"
done
echo -e "DONE"
sleep 2

这是我项目中正在执行 shell 文件的 java 类-

URL resource = ClassLoader.getSystemResource("cleanup.sh");
File resourceFile = Paths.get(resource.toURI()).toFile();
String resourceFilePath = resourceFile.getAbsolutePath();
String cmd[] = {"sh", resourceFilePath,"127.0.0.1"};
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(Redirect.INHERIT);
pb.redirectError(Redirect.INHERIT);
Process proc = pb.start();

但是当我执行java程序时,我收到以下错误-

---------------------------
Clearing Cassandra with keyspaces
---------------------------
Get a list of all keyspaces that doesn't contain system prefix
C:Python27python.exe: can't open file 'D:cUsersDelltoolsapache-cassandra-2.2.6bin/cqlsh.py': [Errno 2] No such file or directory
Dropping all keyspaces that doesn't contain system prefix...
DONE

如您所见,它说无法打开文件"D:\c\Users\Dell\tools\apache-cassandra-2.2.6\bin/cqlsh.py":[errno 2] 没有这样的文件或目录,如果您注意到文件路径以 D: 驱动器开头,我想这是因为我的项目 workpspace 在 D: 驱动器中运行。那么我该如何让它工作。

与其依赖cqlsh,不如通过 Cassandra Java 驱动程序更容易、更便携 - 只需从类中获取密钥空间列表Metadata并删除所有非系统(如果您使用的是 DSE,请小心,因为存在名称为dse_...的系统密钥空间(。 代码可能如下所示(未测试(:

Metadata md = cluster.getMetadata();
List<KeyspaceMetadata> keyspaces = md.getKeyspaces();
for (KeyspaceMetadata ks: keyspaces) {
if (ks.getName().startsWith("system"))
continue;
session.execute("drop keyspace " + ks.getName());
}

也许你可以试试这个:"D:cUsersDelltoolsapache-cassandra-2.2.6bincqlsh.py""D:\c\Users\Dell\tools\apache-cassandra-2.2.6\bin\cqlsh.py"而不是:"D:cUsersDelltoolsapache-cassandra-2.2.6bin/cqlsh.py"。你的表情中有一个斜杠而不是反斜杠。