コマンドラインから直接実行するときにうまく機能するbashスクリプト/home/x/bin/asdf
(一緒にパイプされた複数のJVMを起動します)があります。
/home/x/bin/asdf
ただし、同じ実行を試みると
echo '/home/x/bin/asdf' | at SOME_TIME
その後、スクリプトとJVMが起動していることがわかりますが、約1秒後に終了します。これらのJVMの初期出力はstdout経由で電子メールで送信されるため、at
一時的に機能します。
それでは、asdf
スクリプト/JVMがほぼ即座に終了するのはなぜですか?直接実行すると無限に実行され、コンテンツを出力します。
注:JVMの1つはTCP接続を確立します。これがランタイムによって実行されることを確認できませんat
。ただし、エラーがある場合はstderrに印刷されます。しかし、at
電子メールにエラーはありません。
答え1
したがって、スクリプトを直接起動することとスクリプトを実行することの主な違いは、at
後者の場合は標準入力が不足していることです。
したがって、次のようにしてすぐに終了するスクリプトを再現できます。
/home/x/bin/asdf </dev/null
この問題を解決するには、標準入力から入力がないときに終了するJavaプログラムの1つを変更する必要がありました。