2

分散 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_nodemake_runport=$((14195+$1))1 2mystart...12

を使用した出力例を次に示します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 を編集してデーモン化する

4

1 に答える 1

2

これが実際にそれを除外したことから来るとは想像しがたいですmystartcommand。それは何かと関係があるに違いない$IFS

あなたは交換しようとすることができます

for i in $(seq -s " " $start $end); do

for ((i=$start; i<=$end; $i++)); do

本当のループを持つために。

于 2013-11-15T08:57:04.657 に答える