私はサーバからクライアントをリブートするプロセスを持っています。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
おかげさまで、プロセスのエラーストリームを読むと、javaを介してスクリプトを起動すると、サーバー上のssh設定ファイルを気にかけないので、 'ssh:ホスト名client14を解決できませんでした。なぜこのようなことが起こるのか? – besmart
最も可能性の高い原因は、Javaプロセスが別のユーザーとして実行されていることです。 – Tim