次の ksh スクリプトがあります。
sqlplus usr1/pw1@DB1 @$DIR/a.sql $1 &
sqlplus usr2/pw2@DB2 @$DIR/b.sql $1 &
wait
echo "Done!"
$DIR は、a.sql と b.sql が存在する絶対パスを持つ変数です。
しばらくの間、このスクリプトを毎日実行してきましたが、問題なく動作しています。意図は、両方の SQL*Plus セッションがバックグラウンドで並行して実行されることです。セッションが終了すると、アプリケーションの次のステップに進むことができます。
もうテスト版ではないので、crontab で毎日実行するようにスケジュールしました。私が今抱えている問題は、「待機」で一時停止せず、sqlplus セッションを終了させないことですが、「完了!」を直接出力します。実際のアプリでは、その「echo Done!」実際には、a.sql および b.sql の出力に対して何らかの処理を行うための別のプログラムへの呼び出しです。しかし、両方の SQL スクリプトが実際に終了するのを待っていないため、処理を実行できません。
自分で実行すると、ローカルディレクトリから実行する場合でも、ルートから実行する場合でも(crontabで実行するように)、完全に機能します。しかし、crontab によって自動的に実行されると、私は待機に止まらず、すべてを台無しにします。
何が起こっているのかについてのアイデアはありますか? ありがとう!