2

Windowsアプリケーションからjsch ChannelExecによって呼び出される、他の多くのスクリプトを接着する.shスクリプトがあります。

Channel channel = session.openChannel("exec");

((ChannelExec) channel).setCommand("/foo/bar/foobar.sh");

channel.connect();

「nohup /foo/bar/foobar.sh >> /path/to/foo.log &」のようなコマンドを実行すると、すべての長期的なジョブ (データベース操作、ファイル処理など) が失われるようです。

ログファイルをチェックして、それらのエコーのものだけを見つけます(長時間の操作の前後、実行時間の計算など)。

アクセス許可 $PATH を確認し、ソース /etc/profile を .sh に追加しましたが、これらはどれも機能しません。

しかし、コマンドを通常どおり実行すると(同期実行、すべてのエコー出力をWindows上のJavaクライアントに出力)、すべてうまくいきます。

それは本当に具体的な問題です。経験のある人が私を助けてくれることを願っています。

少し早いですがお礼を。

ハン

4

1 に答える 1

6

解決しました!

この状況で頻繁に発生する別の問題は、sshがバックグラウンドジョブとの間でデータを失うことを拒否するため、ログオフを拒否する(「ハングする」)ことです。[6] [7] この問題は、3つのI/Oストリームすべてをリダイレクトすることでも解決できます。

http://en.wikipedia.org/wiki/Nohupから

私の問題は、psqlとpg_bulkloadが出力をerrストリームに出力することです。

私のスクリプトでは、エラーストリームをリダイレクトしませんでした。

エラーストリームを同じログファイルにリダイレクトすることで、すべてがうまくいきました。

nohup foo.sh > log.log 2>&1 &

山中敦彦のおかげで、彼は素晴らしいJSchライブラリを作成し、ドキュメンテーションのためにPaŭloEbermannを作成しました。

于 2011-06-08T04:13:25.023 に答える