2016-05-16 1 views
0

私はサーバからクライアントをリブートするプロセスを持っています。JavaプロセスwaitForは私に255ファイルを呼び出すexitCodeを与えます

私は、ローカルサーバー上のコントローラに達する私のJavaのWebアプリケーションから

@RequestMapping(value = "/client/restart", method = RequestMethod.GET) 
    public int restartClient(@RequestParam(value = "idClient") int idClient) { 
     Client client = clientService.findById(idClient); 
     int numeroClient = client.getNumeroClient(); 
     String command = "/home/pi/park/script/resetClient.sh"; 
     int exitCode = 1; 
     try { 
      Process p = new ProcessBuilder(command, "" + numeroClient).start(); 

      p.waitFor(); 
      logger.debug("wait for esce con: "+p.waitFor()); 
      exitCode = p.exitValue(); 

     } catch (InterruptedException | IOException e) { 

      logger.error("I/O", e); 
     } 

     return exitCode; 

    } 

これは、操作の終了コードを返す必要があります。私がresetClient.shをシェルから直接呼び出すと、その引数とともに、クライアントは正しく再起動されます。

resetClient.shは、それは簡単です:

#!/bin/sh 

CLIENT=$1 

ssh client$CLIENT 'sudo /etc/init.d/myscript restart' 

私は、サーバーとクライアント間のssh経由でパスワードなしのアクセス権を持っています。 私はsshのmanページは言う正しく0

答えて

0

取得、私のロガーは私に、私は、コマンドの絶対パスまたは相対で試してみたp.waitFor() = 255 を返しますが、私は、サーバーのシェルから.SHコマンドを実行する場合は、同じ です:

ssh exits with the exit status of the remote command or with 255 if an error occurred. 

sshが失敗しているように見えますが、あなたの投稿に理由を示すのに十分な情報がありません。
許可に関連している可能性があります。ttyが添付されていない可能性があります。その理由は考えられます。

詳細は、コマンドの出力をキャプチャする必要があります。

チェックp.getErrorStream()p.getInputStream()です。
問題の内容を示すエラーメッセージが表示されている可能性があります。

+0

おかげさまで、プロセスのエラーストリームを読むと、javaを介してスクリプトを起動すると、サーバー上のssh設定ファイルを気にかけないので、 'ssh:ホスト名client14を解決できませんでした。なぜこのようなことが起こるのか? – besmart

+0

最も可能性の高い原因は、Javaプロセスが別のユーザーとして実行されていることです。 – Tim

関連する問題