Я использую Camel Exec для автоматического отключения на некоторых наших устройствах.
Команда выключения довольно проста и в основном работает нормально:
from(START_DEEP_SLEEP)
.setBody(constant(null)) // we don't want stdin for exec
.setHeader(ExecBinding.EXEC_COMMAND_ARGS, constant("""shutdown $shutdownDelay "starting deep sleep shutdown" """))
.to("exec:sudo")
Очевидно, эта команда отправит завершение работы приложению, выполняющему ее. Это тоже не большая проблема, за исключением того, что иногда это приводит к выходному значению 143. Я знаю значение возвращаемого значения, и имеет смысл увидеть его здесь, но это происходит только на некоторых устройствах. Большинство других просто возвращают 0. Они все одного типа, так что я действительно не знаю, откуда это расхождение, но это даже не такая большая проблема. Отключение работает, тем не менее.
Проблема в том, что верблюд exec регистрирует это как ошибку:
ERROR 549 --- [Camel (camel-1) thread #1 - seda://start-deepsleep] o.a.camel.component.exec.ExecProducer : The command ExecCommand [args=[shutdown, now, starting deep sleep shutdown], executable=sudo, timeout=9223372036854775807, outFile=null, workingDir=null, useStderrOnEmptyStdout=false] returned exit value 143
Это создает нежелательный шум в нашем мониторинге, и я бы предпочел, чтобы он не регистрировался.
Основная проблема здесь заключается в том, что Camel Exec не throw, поэтому я не могу исключение исключить. Он просто регистрирует ошибку, которая затем обнаруживается нашим анализом журнала.
Я хотел бы обработать этот код выхода изящно, не верблюжий Exec, регистрирующий ошибку. Возвращаемое значение уже записывается отдельно в любом случае. Как я могу это сделать?