質問:UNIXサーバに接続し、実行時引数をスクリプトに渡してスクリプトを実行したいJavaプログラムを使用します。 UNIXサーバに接続し、スクリプトに実行時引数を渡してスクリプトを実行する必要があります。以下のコードを使用してUnixサーバに接続しました。サーバに接続するのに成功しました。スクリプトには一般的なgrepコマンドがあります私はjavaコードを実行すると、出力テキストファイルを見ることができますが、ファイルにはnodataがありますが、シェルプロンプトから手動でスクリプトを実行すると、適切な出力が得られます。 この問題を解決し、この要件を満たすためのより良いオプションがあるかどうか教えてください。UNIXサーバに接続し、Javaプログラムを使用して実行時引数をスクリプトに渡してスクリプトを実行する
Javaコード:
import com.jscape.inet.ssh.*;
import com.jscape.inet.ssh.util.SshParameters;
import java.io.*;
public class Sshexamplelalit implements SshListener {
// state of SSH connection
private boolean connected = false;
public Sshexamplelalit() {
Ssh ssh = null;
try {
// create new Ssh instance
SshParameters params = new SshParameters("sacsun","mwctrl","m33tz0n3");
System.out.print("sacsun Unix server is connected \n");
ssh = new Ssh(params);
// register to capture events
ssh.addSshListener(this);
System.out.println("sacsun Connecting please wait...\n");
SshScript script = new SshScript(ssh);
SshTask task = new SshTask(">","./SACSUN.sh '07Gretchen01965'",">");
//07Gretchen01965
// connect
script.addTask(task);
ssh.connect();
while(!script.isComplete()) {
System.out.println("Waiting");
Thread.sleep(30000);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(connected) {
ssh.disconnect();
}
} catch(Exception e) {
}
}
}
/**
* Captures SshConnectedEvent
*/
public void connected(SshConnectedEvent ev) {
System.out.println("Connected: " + ev.getHost()+"\n");
connected = true;
System.out.println("Connected to server "+ ev.getHost()+"\n");
}
/**
* Captures SshDataReceivedEvent
*/
public void dataReceived(SshDataReceivedEvent ev) {
ev.getData();
}
/**
* Captures SshDisconnectedEvent
*/
public void disconnected(SshDisconnectedEvent ev) {
System.out.println("Wait server is Disconnecting: " + ev.getHost()+"\n");
connected = false;
}
/*
* Main method for SshExample
*/
public static void main(String[] args) {
Sshexamplelalit test = new Sshexamplelalit();
}
}
スクリプト:
#!/bin/sh
HOME_DIR=/usr/ftadapters/logs/adapters/rivaadp
HOME_DIR_ARCH=$HOME_DIR/archive
cd $HOME_DIR
rm RivaAdp.txt
rm BrokerLog.txt
rm Result.txt
rm ArchRivaAdp.txt
echo $1 > out.txt
grep -i $1 *.log > RivaAdp.txt
cd $HOME_DIR_ARCH
grep -i $1 *.log > ArchRivaAdp.txt
echo $1 > out.txt
mv ArchRivaAdp.txt ../
cd ..
grep -i 'publishMessage' RivaAdp.txt > BrokerLog.txt
grep -i 'publishMessage' ArchRivaAdp.txt >> BrokerLog.txt
cnt=`cat BrokerLog.txt | wc -l`
echo $cnt
if [ $cnt -gt 0 ]
then
echo "Notifications Received in the Broker Logs" > Result.txt
else
echo "No Data Found in Broker Logs" > Result.txt
fi
暗闇の中で撮影しようとしています... ./の代わりにスクリプトの完全なパスを使用してみましたか?また、ファイルの引数の完全なパス? – drew
スクリプトは、私が生成され、実行時の引数は、スクリプトは認識していますが、一部のテキストがArchRivaAdp.txtはその中にデータがないので、grepの-i $ 1 * .logの> ArchRivaAdp.txt後の次のステップをskipingファイルどのようにされてoutputfile意味実行されています。 while条件は問題を引き起こしていると思いますか? while(!script.isComplete()){System.out.println( "Waiting"); Thread.sleep(30000); }。私もThread.sleep(180000)で試しました;(3分)動作しませんでした。 – user1227648