私はさまざまなリソースをスキャンしてさまざまなことを試しましたが、役に立ちませんでした。
これが状況です。
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
があります)。前もって感謝します。
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'