Bash script to distributed tasks into servers
bash
#!/bin/bashecho "Bash Script"declare -A serversdeclare -A used_serversservers[1]="eos"servers[2]="broad"# number of serversn=${#servers[@]}declare -A nodesdeclare -A used_nodesecho "Enter total number of nodes run on the server, followed by [ENTER]:"read totalfor((i=1; i<=${total}; i++));do nodes[$i]=$i used_nodes[$i]=0doneverbose=false#### show initial arraysif [ $verbose == true ];then for j in "${nodes[@]}" do echo "$j" echo "used_nodes[$j] = ${used_nodes[$j]}" donefi####echo "Enter maximum number of nodes you want to run on this server, followed by [ENTER]:"read numdeclare -A server_nodesnodes_count=0servers_count=0while [ $nodes_count -lt $total ]do rest_nodes=$((${total}-${nodes_count})) rest_servers=$((${n}-${servers_count})) echo "There are $rest_nodes nodes to be assigned to $rest_servers servers" echo "Available servers: " for((i=1; i<=n; i++)); do if [ -z "${used_servers[$i]}" ]; # server not used yet -z : is zero then echo "$i : ${servers[$i]}" fi done srvid=$((${servers_count}+1)) server_nodes[$srvid]="" tasks_num=$(($rest_nodes>$num?$num:$rest_nodes)) nodes_count=$(($nodes_count+$task_num)) count=0 for k in "${nodes[@]}" do if [ ${used_nodes[$k]} == "0" ]; then used_nodes[$k]=1 count=$(($count+1)) server_nodes[$srvid]="${server_nodes[$srvid]} $k" if [ $count == $num || $nodes_count == $total ]; then break; fi fi done for snkey in "${!server_nodes[@]}" do printf "Server $snkey runs nodes : " for snval in "${server_nodes[$snkey]}" do printf "$snval " done printf "\n" done #### debug info if [ $verbose == true ]; then for((i=1; i<=total; i++)); do echo "used_nodes[$i] = ${used_nodes[$i]}" done fi #### done