2017-02-21 12 views
1

ファイルに10行を読み込むbashスクリプトがあります。各行には起動が必要なサーバー名があり、起動処理に時間がかかり、次のサーバーで処理できるようにスクリプトで「control c」を送信する必要があります。そうしないと、ブート処理中に各サーバーでループ処理が長くかかることがあります。ループ処理を続行するために制御cを送信します

ここでは、各サーバで30分以上かかるが、制御cがスクリプト/自動化に送信されるとループが続行する可能性があります。

$ eb restore environment_id 
INFO: restoreEnvironment is starting. 
-- Events -- (safe to Ctrl+C) Use "eb abort" to cancel the command. 
2017-01-01 12:00 restoreEnvironment is starting 
2017-01-01 12:15 Environment health has transitioned to Pending. Initialization in progress (running for 28 seconds). There are no instance 
2017-01-01 12:20 Created security group named: sg-123123123 
2017-01-01 12:22 Created load balancer named: awseb-e-3-qweasd2-DSLFLSFJHLS 
2017-01-01 12:24 Created security group named: sg-123123124 
2017-01-01 12:26 Created Auto Scaling launch configuration named: awseb-e-DSLFLSFJHLS-stack-AWSEBAutoScalingLaunchConfiguration-DSLFLSFJHLS 
2017-01-01 12:28 Added instance [i-01askjdkasjd123] to your environment. 
2017-01-01 12:29 Created Auto Scaling group named: awseb-e-DSLFLSFJHLS-stack-AWSEBAutoScalingLaunchConfiguration-DSLFLSFJHLS 
2017-01-01 12:30 Waiting for EC2 instances to launch. This may take a 30 minutes 
2017-01-01 13:15 Successfully launched environment: pogi-server 

ここは私の仕事ですスクリプト

#!/bin/bash 
DIR=/jenkins/workspace/restore-all 
INSTANCE_IDS=/jenkins/workspace/environment-ids 
EB_FILE=$DIR/server.txt 

echo "PROCEEDING TO WORK DIRECTORY" 
cd $DIR ; pwd 
    echo"" 

    echo "CREATING A CODE FOLDER" 
    mkdir $DIR/code ; pwd ; ls -ltrh $DIR/code 
    echo"" 


    for APP in `cat $EB_FILE | awk '{print $NF}' | grep -v 0` 
    do 

    echo "#########################################" 
    echo "RESTORING = "$APP 
    echo "" 
    echo "COPYING BEANSTALKFILES" 
    mkdir $DIR/code/$APP ; cd $DIR/code/$APP 
    cp -pr $DIR/beasntalk/$APP/dev/.e* $DIR/code/$APP 
    echo "" 
    echo "" 
    echo "TRIGGERING EB RESTORE" 
    cd $DIR/code/$APP 
    eb restore `tail -1 $INSTANCE_IDS/$APP-dev.txt` 
    echo "" 
    echo "REMOVE CODE FOLDER" 
    cd $DIR/code ; rm -rf $DIR/code/* 
    echo"" 

    done 

    echo "REMOVE WORKSPACE FOLDER" 
    rm -rf $DIR/* 
    echo"" 
+0

私は、スクリプトの末尾に/ $ DIRからすべてを削除することがわかり - もしそうなら、どこ$ DIR/beasntalk/*から来るのでしょうか?さらに、上記の出力で述べたように、** "eb abort" **を試してみましたか? – JayRugMan

+0

こんにちはJayRugMan、ここであなたの注意に感謝します。このスクリプトはJenkinsによってトリガーされ、git repoからBeanstalk/*ファイルをダウンロードする機能があります。 server.txtファイルに関して、そのファイルには、ループプロセスが探している環境名が含まれています。環境IDは、終了した環境の環境IDを含むテキストファイルです。 – Siomay

答えて

0

あなたは&とバックグラウンドでeb restoreコマンドを入れてみましたがありますか?

投稿した内容を書き直しました。私はそれがいくつかの不確実性のために働くかどうかわかりません(つまり、server.txtの内容はどのように見えるのですか?毎回restore-allディレクトリにコピーしますか?beanstalk/*/dev/.e*を毎回restore-allなどに入れますか? ...)が、ここでは、次のとおりです。

#!/bin/bash 
restore-all_dir=/jenkins/workspace/restore-all 
InstanceIDs=/jenkins/workspace/environment-ids 
EBFile=${restore-all_dir}/server.txt 

echo -ne " PROCEEDING TO ${restore-all_dir} ..." 
cd ${restore-all_dir} 
echo -e "\b\b\b - done\n" 
pwd 

echo -ne " CREATING FOLDER ${restore-all_dir}/code ..." 
mkdir ${restore-all_dir}/code 
echo -e "\b\b\b - done\n" 
pwd 
ls -ltrh ${restore-all_dir}/code 

for i in `awk '!/0/ {print $NF}' ${EBFile}`; do 
    echo "#########################################" 
    echo -e "#### RESTORING: ${i}\n" 

    echo -en " COPYING BEANSTALKFILES ..." 
    mkdir ${restore-all_dir}/code/${i} 
    cd ${restore-all_dir}/code/${i} 
    cp -pr ${restore-all_dir}/beanstalk/${i}/dev/.e* ${restore-all_dir}/code/${i} 
    echo -e "\b\b\b - done\n" 

    echo -en " TRIGGERING EB RESTORE ..." 
    cd ${restore-all_dir}/code/${i} 
    echo "eb restore `tail -1 ${InstanceIDs}/${i}-dev.txt` > ${restore-all_dir}/${i}_output.out &" ## directs output to a file and puts the process into the background 
    echo -e "\b\b\b - put into background\n output saved in ${restore-all_dir}/${i}_output.out\n" 

    ## Is this necessary in every iteration, or can it be excluded and just removed with the final rm -rf command? 
    ## echo -en " REMOVE CODE FOLDER ..." 
    ## cd ${restore-all_dir}/code 
    ## rm -rf ${restore-all_dir}/code/* 
    ## echo -e "\b\b\b - done\n" 
done 

## this will loop "working..." until all background eb restore jobs are no longer "Running" 
echo -en "\n working..." 
while `jobs | awk '/Running/ && /eb restore/ {count++} END{if (count>=1) print "true"; else print "false"}'`; do 
    echo -en "\b\b\b\b\b\b\b\b\b\b\b working..." 
done 
echo -e "\b\b\b\b\b\b\b\b\b\b\b - done  \n" 

## this will also remove the output files unless they are put somewhere else 
echo -en " REMOVE WORKSPACE FOLDER ..." 
rm -rf ${restore-all_dir}/* 
echo -e "\b\b\b - done\n" 
+0

&を追加することは一度もありませんでした。今日はあなたのスクリプトを試し、フィードをここに戻します。 – Siomay

+0

素晴らしいです。私は結果を聞くことを楽しみにしています。 – JayRugMan

+0

この部分のように見えますが、スクリプト終了前にコメントを置いてもoutput.outが表示されません。 { echo -en "\ n working ..." 'jobs | awk '/ Running/&&/eb restore/{count ++} END {if(count> = 1)は "true"を出力します。そうでなければ "false"を出力します} ''; doecho -en "\ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b作業中..." done echo -e "\ b \ b \ b \ b \ b \ \ \ \ b \ b \ b \ b \ b \ b - 完了\ n " " – Siomay

関連する問題