我有一个 bash 脚本/home/x/bin/asdf
(它会启动一堆 JVM,通过管道连接在一起),当直接从命令行运行时,效果很好
/home/x/bin/asdf
但是,当尝试运行相同的
echo '/home/x/bin/asdf' | at SOME_TIME
然后我可以看到脚本和我的 JVM 启动,但它们在一秒左右后终止。这些 JVM 的初始输出确实会通过at
标准输出通过电子邮件发送,因此它正在工作 - 短暂的。
那么为什么asdf
脚本/JVM 会几乎立即终止呢?直接运行时,它会无限期地运行并输出内容。
注意:其中一个 JVM 建立 TCP 连接。我无法确认这是由 运行时完成的at
。但如果有错误,它将被打印到 stderr。但在at
邮件中并没有错误。
答案1
因此,直接启动脚本和运行脚本之间的关键区别at
是:后一种情况缺少标准输入。
因此,我可以通过执行以下操作来重现立即关闭的脚本:
/home/x/bin/asdf </dev/null
为了解决这个问题,我必须更改其中一个 Java 程序,该程序在没有来自标准输入的输入时终止。