Runtime.getRuntime(). exec() 메소드를 사용하여 Java 코드에서 PostrgeSQL 서버를 다시 시작하는 기능을 구현하려고합니다. 이 방법은 PostgreSQL 서버가 SSL을 사용할 수 없지만 PostreSQL 서버가 SSL을 사용할 수 있고 개인 키가 암호로 암호화되어있는 경우 Passphase를 전달해야하는 경우 제대로 작동합니다. 동일한 코드를 구현하기 위해 아래 코드로 시도했습니다.Runtime.getRuntime()에 암호 전달 exec
String postgreSQLRestartCMD =
"/u/postgreSQL/pg_ctl -D /u/postgreSQL/data restart -w";
//-w option waits until the passphase is sent
final Process restartPosgreSQLServer = Runtime.getRuntime().exec(postgreSQLRestartCMD);
PrintStream ps = new PrintStream(restartPosgreSQLServer.getOutputStream());
ps.println("keyPassword"); // sending passphasse here
new Thread(new Runnable() {
@Override
public void run() {
try {
IOUtils.copy(restartPosgreSQLServer.getInputStream(), logWriter);
}
catch (final IOException e) {
logWriter.println("Error occurred while reading InputStream.");
e.printStackTrace(logWriter);
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
try {
IOUtils.copy(restartPosgreSQLServer.getErrorStream(), logWriter);
}
catch (final IOException e) {
logWriter.println("Error occurred while reading ErrorStream.");
e.printStackTrace(logWriter);
}
}
}).start();
int returnStatus = restartPosgreSQLServer.waitFor();
if (returnStatus == 1) {
logWriter.println("Error has occured while running PostgreSQL server.");
} else {
logWriter.println("PostgreSQL has started successfully.");
}
그러나 서버가 시작되지 않았습니다. 나는 리눅스에서 노력하고있다. 콘솔에서 그 라인 아래로 삼진지고 나는 passohase가 제대로 보내지지 않은 것 같아요.
Enter PEM pass phrase:
누가 잘못되었는지, 왜 통과 신호가 전송되지 않는지 다른 사람이 나를 지적 할 수 있습니까? 모든 제안이나 도움은 정말 감사하겠습니다. 제발 도와주세요. 미리 감사드립니다.
편집 : Runtime.getRuntime(). exec (cmd)가 새 프로세스를 작성하고 있음을 알았을 때 ps.println ("password")이 상위 프로세스로 전달됩니다. 그러나 나는 나의 관찰이 의례인지 아닌지 잘 모르겠습니다. 제발 도와주세요.