分散 erlang アプリケーションの複数のノードを起動するスクリプトを作成しています (ただし、同じマシン上にあります)。以下は、コードの簡略化された例です。
start_extra_node() {
echo "starting node $1"
port=$((14195+$1))
mystartcommand -p $port -n node$1 --daemonize
res=$?
if [ $res -ne 0 ]; then
echo "ERROR: could not start extra VM node $1"
exit
fi
return $res
}
make_run() {
echo " "
echo "----------------------------------------------"
echo "making run with $3 nodes"
start=$2
end=$(($3-1))
echo "$start $end"
for i in $(seq -s " " $start $end); do
echo "start node $i"
start_extra_node $i
done
}
case $# in
0)
usage;;
1)
echo "starting node that runs the function st:$1 ..."
start_api_node $1;;
2)
echo "running evaluation on 1 to $2 nodes"
for i in `seq -s " " 1 $2`; do
echo "make_run $1 1 $i"
make_run $1 1 $i
done
;;
esac
スクリプトは 2 つのパラメーターで呼び出されます。最初のパラメーターはここでは重要ではありません。2 番目のパラメーターは、ノードの最大数です。スクリプトは、1 ~ $2 ノードで関数を実行する必要があります。
スクリプトを次のように開始するとしますbash myscript foo 3
。
for ループ内のmystartcommand -p $port -n node$1 --deamonize
の存在に応じて、動作が異なります。$1 が に評価されるため、そのままにしておくと失敗します。$1 が期待どおりに評価されるため、コメントアウトしても算術式は失敗しません。start_extra_node
make_run
port=$((14195+$1))
1 2
mystart...
1
2
を使用した出力例を次に示しますmystartcommand...
。
>bash myscript foo 3
...[snip]
making run with 3 nodes
1 2
start node 1 2
starting node 1 2
eval_mr.sh: Zeile 17: 14195+1 2: Syntaxerror in expression.
mystart...
コメントアウトされているもの:
>bash myscript foo 3
...[snip]
making run with 3 nodes
1 2
start node 1
starting node 1
start node 2
starting node 2
これをさらにデバッグする方法がわかりません。どんなリードにも感謝します。
demonize を編集してデーモン化する