forum.bitel.ru
http://forum.bitel.ru/

doSync() и process hasn't exited
http://forum.bitel.ru/viewtopic.php?f=7&t=4206
Страница 1 из 1

Автор:  dynax60 [ 24 июн 2010, 13:59 ]
Заголовок сообщения:  doSync() и process hasn't exited

Здравствуйте, коллеги! Есть шлюз со скриптом:

Код:
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.ipn.bean.AddressRange;
import bitel.billing.server.ipn.UserStatus;
import bitel.billing.server.ipn.bean.AddressRangeManager;
import bitel.billing.server.ipn.bean.VlanManager;
import bitel.billing.server.util.DefaultServerSetup;
import bitel.billing.server.util.Utils;
import bitel.billing.common.IPUtils;

protected void doSync()
{
    date = new GregorianCalendar();
    gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );                               
    script = gateSetup.getStringValue( "script" );
    String host = gate.getHost();
   String [] arguments = { script, host };
   log.info("Execute: " + script + " " + host);       
   Process process = Runtime.getRuntime().exec( arguments );
   log.info(script + " " + host + ", exitCode=" + process.exitValue() );       
}


В конфигурации:

Код:
user_rule.editor.class=bitel.billing.module.services.ipn.editor.ManadContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.ManadGateWorker
use.script=1


При запуске почему-то возвращается ошибка, что процесс не завершился! :) В логах:


Код:
06-24/11:26:57  INFO [Thread-110] ManadGateWorker - Running script
06-24/11:26:57  INFO [Thread-110] ManadGateWorker - Execute: /usr/local/BGBillingServer/1telecom/sync.sh 192.168.122.65
06-24/11:26:57 ERROR [Thread-110] ManadGateWorker - Eval error2: Method Invocation process.exitValue
Method Invocation process.exitValue : at Line: 19 : in file: inline evaluation of: ``import bitel.billing.server.contract.bean.*;  import bitel.billing.server.ipn.be . . . '' : process .exitValue ( )

Called from method: doSync
Target exception: java.lang.IllegalThreadStateException: process hasn't exited

        at bsh.BSHMethodInvocation.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHBinaryExpression.eval(Unknown Source)
        at bsh.BSHArguments.getArguments(Unknown Source)
        at bsh.BSHMethodInvocation.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHBlock.evalBlock(Unknown Source)
        at bsh.BSHBlock.eval(Unknown Source)
        at bsh.BshMethod.invokeImpl(Unknown Source)
        at bsh.BshMethod.invoke(Unknown Source)
        at bsh.BshMethod.invoke(Unknown Source)
        at bitel.billing.server.ipn.GateWorker$Scripter.invokeMethod(GateWorker.java:269)
        at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:230)
        at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:107)
        at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:85)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream - java.lang.RuntimeException: Method Invocation process.exitValue : at Line: 19 : in file: inline evaluation of: ``import bitel.billing.server.contract.bean.*;  import bitel.billing.server.ipn.be . . . '' : process .exitValue ( )

Called from method: doSync
Target exception: java.lang.IllegalThreadStateException: process hasn't exited

06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:243)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:107)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:85)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream - Caused by: Method Invocation process.exitValue : at Line: 19 : in file: inline evaluation of: ``import bitel.billing.server.contract.bean.*;  import bitel.billing.server.ipn.be . . . '' : process .exitValue ( )

Called from method: doSync
Target exception: java.lang.IllegalThreadStateException: process hasn't exited

06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHMethodInvocation.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHPrimaryExpression.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHPrimaryExpression.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHBinaryExpression.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHArguments.getArguments(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHMethodInvocation.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHPrimaryExpression.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHPrimaryExpression.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHBlock.evalBlock(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BSHBlock.eval(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BshMethod.invokeImpl(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BshMethod.invoke(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bsh.BshMethod.invoke(Unknown Source)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bitel.billing.server.ipn.GateWorker$Scripter.invokeMethod(GateWorker.java:269)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:230)
06-24/11:26:57 ERROR [Thread-110] LoggingPrintStream -  ... 2 more
06-24/11:26:57 ERROR [Thread-110] ManadGateWorker - Gate unaccesible - 192.168.122.65
06-24/11:26:57 ERROR [Thread-110] ManadGateWorker - -------------------------
06-24/11:26:57 ERROR [Thread-110] ManadGateWorker - error: Method Invocation process.exitValue : at Line: 19 : in file: inline evaluation of: ``import bitel.billing.server.contract.bean.*;  import bitel.billing.server.ipn.be . . . '' : process .exitValue ( )

Called from method: doSync
Target exception: java.lang.IllegalThreadStateException: process hasn't exited

java.lang.RuntimeException: Method Invocation process.exitValue : at Line: 19 : in file: inline evaluation of: ``import bitel.billing.server.contract.bean.*;  import bitel.billing.server.ipn.be . . . '' : process .exitValue ( )

Called from method: doSync
Target exception: java.lang.IllegalThreadStateException: process hasn't exited

        at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:243)
        at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:107)
        at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:85)
Caused by: Method Invocation process.exitValue : at Line: 19 : in file: inline evaluation of: ``import bitel.billing.server.contract.bean.*;  import bitel.billing.server.ipn.be . . . '' : process .exitValue ( )

Called from method: doSync
Target exception: java.lang.IllegalThreadStateException: process hasn't exited

        at bsh.BSHMethodInvocation.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHBinaryExpression.eval(Unknown Source)
        at bsh.BSHArguments.getArguments(Unknown Source)
        at bsh.BSHMethodInvocation.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHBlock.evalBlock(Unknown Source)
        at bsh.BSHBlock.eval(Unknown Source)
        at bsh.BshMethod.invokeImpl(Unknown Source)
        at bsh.BshMethod.invoke(Unknown Source)
        at bsh.BshMethod.invoke(Unknown Source)
        at bitel.billing.server.ipn.GateWorker$Scripter.invokeMethod(GateWorker.java:269)
        at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:230)
        ... 2 more


Убираю ``+ process.exitValue()' и все работает :) К слову, про код возврата:

Код:
[root@bg 1telecom]# /usr/local/BGBillingServer/1telecom/sync.sh 192.168.122.65
192.168.122.65:7022     done
[root@bg 1telecom]# echo $?
0
[root@bg 1telecom]#


Все вроде бы нормально. В чем может быть дело?

Автор:  vdd [ 24 июн 2010, 17:13 ]
Заголовок сообщения:  Re: doSync() и process hasn't exited

Код:
Runtime.getRuntime().exec( arguments );

Синхронный или асинхронный?

Автор:  dynax60 [ 24 июн 2010, 17:26 ]
Заголовок сообщения:  Re: doSync() и process hasn't exited

vdd писал(а):
Код:
Runtime.getRuntime().exec( arguments );

Синхронный или асинхронный?


Про что речь? Не понимаю. И как посмотреть? ;))

Автор:  vdd [ 24 июн 2010, 17:39 ]
Заголовок сообщения:  Re: doSync() и process hasn't exited

http://java.sun.com/javase/7/docs/api/java/lang/Process.html
Похоже, что вызов exec асинхронный. Ну или по модному - не блокирующий.
Что бы получить код завершения процесса, нужно, как минимум, дождаться завершения процесса ;)

Автор:  dynax60 [ 24 июн 2010, 17:49 ]
Заголовок сообщения:  Re: doSync() и process hasn't exited

vdd писал(а):
http://java.sun.com/javase/7/docs/api/java/lang/Process.html
Похоже, что вызов exec асинхронный. Ну или по модному - не блокирующий.
Что бы получить код завершения процесса, нужно, как минимум, дождаться завершения процесса ;)


Честно говоря, я Java не знаю. А как должно быть? Код представлен выше (самый первый пост вверху).

Автор:  vdd [ 24 июн 2010, 17:54 ]
Заголовок сообщения:  Re: doSync() и process hasn't exited

Согласно:
http://java.sun.com/javase/7/docs/api/java/lang/Process.html#waitFor()

можно попробовать поставить:
Код:
process.waitFor();


перед log.info

Автор:  dynax60 [ 24 июн 2010, 18:04 ]
Заголовок сообщения:  Re: doSync() и process hasn't exited

vdd писал(а):
Согласно:
http://java.sun.com/javase/7/docs/api/java/lang/Process.html#waitFor()

можно попробовать поставить:
Код:
process.waitFor();


перед log.info


Спасибо, отработало как надо!

Автор:  vdd [ 24 июн 2010, 18:32 ]
Заголовок сообщения:  Re: doSync() и process hasn't exited

На здоровье.
Но если надумаете копать скрипты глубже, без познавания Явы вам не обойтись.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/