我有以下 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 自动执行时,我并没有停下来等待,而是把整个事情搞砸了。
关于可能发生的事情有什么想法吗?谢谢!