BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 22 ноя 2024, 04:29

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 13:59 
Не в сети

Зарегистрирован: 07 апр 2010, 19:03
Сообщения: 36
Откуда: Москва
Карма: 0
Здравствуйте, коллеги! Есть шлюз со скриптом:

Код:
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]#


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 17:13 
Не в сети

Зарегистрирован: 16 ноя 2007, 16:11
Сообщения: 829
Карма: 49
Код:
Runtime.getRuntime().exec( arguments );

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 17:26 
Не в сети

Зарегистрирован: 07 апр 2010, 19:03
Сообщения: 36
Откуда: Москва
Карма: 0
vdd писал(а):
Код:
Runtime.getRuntime().exec( arguments );

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 17:39 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 17:49 
Не в сети

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 17:54 
Не в сети

Зарегистрирован: 16 ноя 2007, 16:11
Сообщения: 829
Карма: 49
Согласно:
http://java.sun.com/javase/7/docs/api/java/lang/Process.html#waitFor()

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


перед log.info


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 18:04 
Не в сети

Зарегистрирован: 07 апр 2010, 19:03
Сообщения: 36
Откуда: Москва
Карма: 0
vdd писал(а):
Согласно:
http://java.sun.com/javase/7/docs/api/java/lang/Process.html#waitFor()

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


перед log.info


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: doSync() и process hasn't exited
СообщениеДобавлено: 24 июн 2010, 18:32 
Не в сети

Зарегистрирован: 16 ноя 2007, 16:11
Сообщения: 829
Карма: 49
На здоровье.
Но если надумаете копать скрипты глубже, без познавания Явы вам не обойтись.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.067s | 33 Queries | GZIP : On ]