ssh接続が閉じられた後、バックグラウンドでJavaを経由してbashスクリプトを実行します

totothegreat:

私は、リモートのLinuxマシン上で、簡単なbashスクリプトを実行するためにJavaを使用しています。

「shortoracle.bash」という名前のbashスクリプトは、このスクリプトを持っています:

#!/bin/sh
runsql() {
   i="$1"
   end=$((SECONDS+360))
   SECONDS=0
   while (( SECONDS < end )); do
   echo "INSERT into table_$i (col1) values (CURRENT_TIMESTAMP);" | sqlplus username/password
   sleep 1
   done
}


for i in $(seq 1 10); do
 echo "DROP TABLE table_$i;" | sqlplus username/password
 echo "CREATE TABLE table_$i (col1 TIMESTAMP WITH TIME ZONE);" | sqlplus username/password
 runsql $i &
done
wait

簡単に言えば:360秒のクエリを実行する10の並列接続を作成します。

私のJavaプログラムから私は、次のコマンドを実行します。

sshconnection.execute("nohup su - oracle -c './shortoracle.bash'",2000);

sshは成功したスクリプトを実行します。

私はssh接続を終了するために2秒(第2のparam)のタイムアウト後、したいが、バックグラウンドで適切に実行を継続するためのスクリプトのために(そのためnohupを、または私は思ったので)、それは起こっていません。

私はsshconnectionを終了2秒後、bashのプログラムは、単に動作を停止します。

  • わずか3 10の接続が開いています。

  • これ以上の挿入が起こっ。

私は、接続に長いタイムアウトを与える場合は、すべてがうまくいっているが、私は、この特定の接続でハングアップしたくない、私はプログラムを上に移動する必要があります。

何が私がここで間違っているのでしょうか?

スヴェンHakvoort:

あなたは追加する必要があり&、あなたのコマンドの後すなわち

sshconnection.execute("nohup su - oracle -c './shortoracle.bash' &",2000);

あなたはSSH接続を閉じたときに、それ自体はnohupのでそれ以外の場合は切断されます。&あなたがバックグラウンドで「nohupを」自分自身を実行し、したがって、あなたがSSH接続を閉じた後、それが実行を継続することができます。

これはあなたを役に立てば幸い!

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=437669&siteId=1