从 shell 并行调用 SQL 脚本
Parallel invocation of SQL script from shell
我正在使用以下逻辑并行执行 SQL
PID_LIST="start"
while [ "$PID_LIST" ]
do
$count =0
if [ "z$PID_LIST" = "zstart" ]
then
PID_LIST=""
fi
for PID in $PID_LIST
do
# echo "Checkpid $PID"
if kill -0 $PID >/dev/null 2>&1
then
PID_LIST_TMP="$PID_LIST_TMP $PID"
$count =`expr $count + 1`
fi
done
PID_LIST=$PID_LIST_TMP
if [ $more_re_to_process -eq "Y" ]
then
while [ $count -le $MAX_INSTANCE ]
do
#prepare input for sql
invoke SQL script sql1 with prepared one >LOG_$count
PID_LIST = PID_LIST="$PID_LIST $!"
done
fi; done
在这个例子中,每当任何 sql 进程完成时,我都会创建一个新进程。
但问题是我最终创建了一个新日志。我希望每当我创建一个新的 SQL 会话时,它都会使用已完成的进程日志文件(如果有的话)。
有人能告诉我该怎么做吗?
假设shell处理数组,您可以将PID作为元素存储在数组中,并在进程完成时仅清除该元素,以便其他进程的索引保持不变;然后在循环中调用新进程扫描已清除的元素;使用数组索引 $count
、>LOG_$count
使用已完成的进程的日志文件。
我正在使用以下逻辑并行执行 SQL
PID_LIST="start"
while [ "$PID_LIST" ]
do
$count =0
if [ "z$PID_LIST" = "zstart" ]
then
PID_LIST=""
fi
for PID in $PID_LIST
do
# echo "Checkpid $PID"
if kill -0 $PID >/dev/null 2>&1
then
PID_LIST_TMP="$PID_LIST_TMP $PID"
$count =`expr $count + 1`
fi
done
PID_LIST=$PID_LIST_TMP
if [ $more_re_to_process -eq "Y" ]
then
while [ $count -le $MAX_INSTANCE ]
do
#prepare input for sql
invoke SQL script sql1 with prepared one >LOG_$count
PID_LIST = PID_LIST="$PID_LIST $!"
done
fi; done
在这个例子中,每当任何 sql 进程完成时,我都会创建一个新进程。 但问题是我最终创建了一个新日志。我希望每当我创建一个新的 SQL 会话时,它都会使用已完成的进程日志文件(如果有的话)。
有人能告诉我该怎么做吗?
假设shell处理数组,您可以将PID作为元素存储在数组中,并在进程完成时仅清除该元素,以便其他进程的索引保持不变;然后在循环中调用新进程扫描已清除的元素;使用数组索引 $count
、>LOG_$count
使用已完成的进程的日志文件。