私はこのコードを持っています:
sqlplus usr1/pw1@DB1 @$DIR/a.sql $1 &
sqlplus usr2/pw2@DB2 @$DIR/b.sql $1 &
wait
echo "Done!"
バックグラウンドで両方の sqlplus セッションを同時に実行できるようにし、両方が終了するまで待機するコマンドを待ちます。
実際のプログラムでは、「エコー」は実際には、以前に実行されたクエリによってスプールされたファイルで動作する別のプログラムへの呼び出しであるため、両方が終了するのを待つことが重要です。
自分で実行するとうまくいくのに、crontabでスケジュールするとうまくいかないので問題があります。解決策が見つからないようなので、何とかその動作をシミュレートしたいと思います。これは私の考えです:
sqlplus usr1/pw1@DB1 @$DIR/a.sql $1
session1=$! //I think this stores sqlpluss pid
sqlplus usr2/pw2@DB2 @$DIR/b.sql $1
session2=$!
while (not finished($session1) and not finished($session2)) //pseudocode
do nothing //maybe sleep for a few seconds, something that wont waste resources unnecesarally
echo "Done!"
そのループを完了する方法について助けが必要です。まず、$session1 と $session2 には各 sqlplus セッションの pid があると仮定しています。それが正しいかどうかはよくわかりません。次に、プロセスがまだ実行されているかどうかを確認する簡単な方法が必要です。最後に、どちらかがまだ実行されている場合は、何百万回もループせずに待機したいだけで、1 分間スリープすることもできます。
提案をお寄せいただきありがとうございます!