[关闭]
@ysongzybl 2015-04-30T01:09:47.000000Z 字数 1490 阅读 770

Bash script to distributed tasks into servers

bash

  1. #!/bin/bash
  2. echo "Bash Script"
  3. declare -A servers
  4. declare -A used_servers
  5. servers[1]="eos"
  6. servers[2]="broad"
  7. # number of servers
  8. n=${#servers[@]}
  9. declare -A nodes
  10. declare -A used_nodes
  11. echo "Enter total number of nodes run on the server, followed by [ENTER]:"
  12. read total
  13. for((i=1; i<=${total}; i++));
  14. do
  15. nodes[$i]=$i
  16. used_nodes[$i]=0
  17. done
  18. verbose=false
  19. #### show initial arrays
  20. if [ $verbose == true ];
  21. then
  22. for j in "${nodes[@]}"
  23. do
  24. echo "$j"
  25. echo "used_nodes[$j] = ${used_nodes[$j]}"
  26. done
  27. fi
  28. ####
  29. echo "Enter maximum number of nodes you want to run on this server, followed by [ENTER]:"
  30. read num
  31. declare -A server_nodes
  32. nodes_count=0
  33. servers_count=0
  34. while [ $nodes_count -lt $total ]
  35. do
  36. rest_nodes=$((${total}-${nodes_count}))
  37. rest_servers=$((${n}-${servers_count}))
  38. echo "There are $rest_nodes nodes to be assigned to $rest_servers servers"
  39. echo "Available servers: "
  40. for((i=1; i<=n; i++));
  41. do
  42. if [ -z "${used_servers[$i]}" ]; # server not used yet -z : is zero
  43. then
  44. echo "$i : ${servers[$i]}"
  45. fi
  46. done
  47. srvid=$((${servers_count}+1))
  48. server_nodes[$srvid]=""
  49. tasks_num=$(($rest_nodes>$num?$num:$rest_nodes))
  50. nodes_count=$(($nodes_count+$task_num))
  51. count=0
  52. for k in "${nodes[@]}"
  53. do
  54. if [ ${used_nodes[$k]} == "0" ];
  55. then
  56. used_nodes[$k]=1
  57. count=$(($count+1))
  58. server_nodes[$srvid]="${server_nodes[$srvid]} $k"
  59. if [ $count == $num || $nodes_count == $total ];
  60. then
  61. break;
  62. fi
  63. fi
  64. done
  65. for snkey in "${!server_nodes[@]}"
  66. do
  67. printf "Server $snkey runs nodes : "
  68. for snval in "${server_nodes[$snkey]}"
  69. do
  70. printf "$snval "
  71. done
  72. printf "\n"
  73. done
  74. #### debug info
  75. if [ $verbose == true ];
  76. then
  77. for((i=1; i<=total; i++));
  78. do
  79. echo "used_nodes[$i] = ${used_nodes[$i]}"
  80. done
  81. fi
  82. ####
  83. done
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注