master() { if (( active >= concurrency)) || [ -n "$quit" ] then sleep 0.1 else echo ' SELECT COUNT(*) FROM tasks WHERE status = 0; SELECT COUNT(*) FROM tasks WHERE status = 0 AND requires is NULL; SELECT id, source_file, required, cmd_arg0, cmd_arg1, cmd_arg2, cmd_arg3, cmd_arg4, cmd_arg5, cmd_arg6, cmd_arg7, cmd_arg8, cmd_arg9, cmd_arg10, cmd_arg11, cmd_arg12, cmd_arg13, cmd_arg14, cmd_arg15, cmd_arg16, cmd_arg17, cmd_arg18, cmd_arg19, cmd_arg20, cmd_arg21, cmd_arg22, cmd_arg23, cmd_arg24, cmd_arg25, cmd_arg26, cmd_arg27, cmd_arg28, cmd_arg29, cleanup, fileid, filename FROM tasks WHERE status = 0 AND requires is NULL ORDER BY source_file LIMIT 1; ' >&3 read -u4 remaining read -u4 ready if (( remaining == 0 )) then sleep 0.1 continue elif (( ready == 0 )) then sleep 0.1 else (( ++active )) read -u4 line taskid=${line%%|*} rest="${line#*|}|" sourcefileid=${rest%%|*} rest=${rest#*|} required=${rest%%|*} rest=${rest#*|} cmd_arg=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cmd_arg+=("${rest%%|*}") rest=${rest#*|} cleanup=${rest%%|*} rest=${rest#*|} destfileid=${rest%%|*} rest=${rest#*|} destfilename=${rest%%|*} rest=${rest#*|} for key in ${!cmd_arg[@]} do [ -z "${cmd_arg[key]}" ] && unset cmd_arg[key] done workerid=$(getworkerid) workertasks[workerid]=$taskid Update tasks status 1 <<<"id = $taskid" createworker $workerid fi fi }