我正在尝试使用jclouds SSH实用程序将脚本复制到一个VM。 以下是我的剧本:
String filename = getKey().toLowerCase() + ".sh";
script = Resources.toString(url, Charsets.UTF_8);
ssh.put("/tmp/" + filename, script);
if(failure.equalsIgnoreCase("killprocesses")){
String processToKill = getProcessName();
response = ssh.exec("/bin/bash /tmp/" + filename + " " + processToKill);
}
#!/bin/bash
# Script for KillProcesses Chaos Monkey
var1=$1
cat << EOF > /tmp/kill_loop.sh
#!/bin/bash
while true;
do
pkill -KILL -f $var1;
sleep 1
done
EOF
nohup /bin/bash /tmp/kill_loop.sh &
Killprocesses.sh文件从java代码中获取参数。它在执行后返回以下错误。
org.jclouds.ssh.SshException: bad status -1 ExecResponse(command=[/bin/bash /tmp/killprocesses.sh python])
at org.jclouds.ssh.jsch.JschSshClient$ExecConnection.create(JschSshClient.java:426)
at org.jclouds.ssh.jsch.JschSshClient$ExecConnection.create(JschSshClient.java:397)
at org.jclouds.ssh.jsch.JschSshClient.acquire(JschSshClient.java:177)
如果我在shell脚本中对参数进行硬编码,则不会抛出任何错误。 如果我作为参数传递,请任何人帮助我理解退出状态的差异。