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/ |