web-dev-qa-db-ja.com

EC2の起動時にbashスクリプトを実行できません

私はさまざまなリソースをスキャンしてさまざまなことを試しましたが、役に立ちませんでした。

これが状況です。

Node.jsアプリを実行するEC2インスタンスがあります。また、ノードアプリのgitリポジトリに新しい変更があるかどうかを確認するbashスクリプト(中間スリープのループ)をバックグラウンドで実行したいと思います。

私のインスタンスのユーザーデータ部分には、これがあります。

#!/bin/bash
su - ec2-user -c 'cd sample-node-app; node index.js'
su - ec2-user -c 'bash /home/ec2-user/check_git.sh &'

ここ から適応されたスクリプト

#!/bin/bash
while true
do

#move into your git repo
cd ~/sample-node-app;

git fetch;
LOCAL=$(git rev-parse HEAD);
REMOTE=$(git rev-parse @{u});

#if our local revision id doesn't match the remote, we will need to pull the changes
if [ $LOCAL != $REMOTE ]; then
    #pull and merge changes
    git pull Origin master;
    git reset --hard Origin/master
    killall node

    npm start;
fi
sleep 5
done
  • ここここ から提案を試し、ファイルパスをrc.localに追加しました。 rc.localの部分を実行すると、ノードアプリは起動するたびに自動的に終了しました。
  • chmod +x check_git.shを使用してスクリプトの権限を設定します。
  • bash /home/ec2-user/check_git.sh./check_git.shなどのユーザーデータ入力のバリエーションを試しました(スクリプトの先頭に#!/bin/bashがあります)。

前もって感謝します。

3
MNS

EC2ユーザーデータに以下を追加することで、なんとか機能させることができました。

#cloud-config

runcmd:
 - rm -rf /var/lib/cloud/*
 - su - ec2-user -c 'bash check_git.sh'
 - su - ec2-user -c 'cd sample-node-app; node index.js'

なぜそれが機能するのかについての理由をまだ見つけていませんが、それに取り組んでいます。

[〜#〜]編集[〜#〜]

なんとか上記を破ることができました。時々働いたが、一貫してではなかった。最終的に、私は次のことに頼りました。

check_git.sh、アプリをチェックして実行するためのifステートメントがあります。

if ! pgrep -x "node" > /dev/null
then
    node index.js &
fi

そして次のuser-data EC2インスタンスの:

#!/bin/bash
Sudo rm -rf /var/lib/cloud/*
su - ec2-user -c 'bash /home/ec2-user/check_git.sh'
1
MNS