我有这段代码:
sqlplus usr1/pw1@DB1 @$DIR/a.sql $1 &
sqlplus usr2/pw2@DB2 @$DIR/b.sql $1 &
wait
echo "Done!"
两个 sqlplus 会话都在后台,因此它们可以同时运行,并等待命令等待它们完成。
在实际程序中,“echo”实际上是对另一个程序的调用,该程序通过先前执行的查询处理假脱机文件,因此等待它们完成很重要。
我有一个问题,因为当我自己执行它时它工作正常,但当我在 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。不确定这是否正确。然后,必须有一些简单的方法来检查进程是否仍在运行,它是 pid。最后,如果仍然有一个正在运行,我只想等待但不要循环数百万次,但可能会睡一分钟:
提前感谢您的任何建议!