2010-12-30 2 views
3

Это команда, которую я хочу запустить:Runtime.exec() не может работать "су - Postgres -c 'pg_dump ..."

su - postgres -c "pg_dump ....." 

для резервного копирования базы данных Postgres.

Если я сейчас в linux shell, в качестве корня, он отлично работает.

Но теперь, я хочу, чтобы запустить его из приложения Java, как:

String cmd = "su - postgres -c \"pg_dump --port 5432 .....\"" 
Process p = Runtime.getRuntime().exec(cmd); 
// read the error stream and input stream 
p.waitFor(); 

Он выдает ошибку:

su: unknown option "--port" 
please try "su --help" to get more information 

Теперь я изменить код, как:

Process p = Runtime.getRuntime().exec(new String[0]{cmd}); 
// read the error stream and input stream 
p.waitFor(); 

Cannot run program "su - postgres -c \"pg_dump .....\"": java.io.IOException: error=2, no that file or directory 

Что мне теперь делать?

ответ

3

Кроме ответов, приведенных выше (и хорошо понимать вашу проблему), помните, что вы всегда можете сделать вашу жизнь проще, просто поместив свою команду в файл сценария оболочки. Например, dumppg.sh файл, который содержит только две строки:

#!/bin/sh 
su - postgres -c "pg_dump ....." 

просто сделать его исполняемым, и (после тестирования его) называют его от Явы.

+0

Должен сказать, что это самый простой способ. спасибо – Freewind

2
exec(new String[]{"sh", "-c", "su - postgres ..."}); 
Смежные вопросы