Spring-XD 执行shell命令失败

Spring-XD fail to execute shell command

Python / springXD不是组合导致我之前写的错误post,单独springxd的shell无法在我的系统上执行成功

流定义:

trigger --cron='0 */1 * * * *' | shell --command='ls' | log

这是错误信息:

2016-04-19T16:06:06-0400 1.3.1.SNAP ERROR inbound.awef-p2_7-log.0-redis:queue-inbound-channel-adapter1 redis.RedisMessageBus - Failed to deliver message; retries exhausted; message sent to queue 'ERRORS:awef-p2_7-log.0' org.springframework.messaging.MessageHandlingException: nested exception is java.lang.RuntimeException: Stream closed
2016-04-19T16:06:17-0400 1.3.1.SNAP ERROR inbound.test-ls.0-redis:queue-inbound-channel-adapter1 process.ShellCommandProcessor - Stream closed
java.io.IOException: Stream closed
        at java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:433) ~[na:1.8.0_66]
        at java.io.OutputStream.write(OutputStream.java:116) ~[na:1.8.0_66]
        at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) ~[na:1.8.0_66]
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) ~[na:1.8.0_66]
        at org.springframework.xd.extension.process.ShellCommandProcessor.send(ShellCommandProcessor.java:156) [spring-xd-extension-process-1.3.1.BUILD-SNAPSHOT.jar!/:na]
        at org.springframework.xd.extension.process.ShellCommandProcessor.sendAndReceive(ShellCommandProcessor.java:171) [spring-xd-extension-process-1.3.1.BUILD-SNAPSHOT.jar!/:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_66]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_66]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_66]
        at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_66]

我怀疑这可能是因为您的 python 代码中的 sys.exit() 调用。如果您不调用 sys.exit() 会怎样?

我终于通过 groovy 脚本调用了 python:

流定义:

trigger --cron='0 0/1 * * * *' | script --script=file:/.../testjobpython.groovy | null

代码groovy:

String[] pythonCmd = ["/usr/bin/python2.7","/.../testjobpython.py"]
Runtime.getRuntime().exec(pythonCmd)