Amazon EC2インスタンスの起動時にshファイルを実行する

Amazon EC2インスタンスの起動時にshファイルを実行する

ノード サーバーを起動する「sh」ファイルがあります。

走ればうまくいく

sh /var/www/init_node.sh

インスタンスが再起動するたびにスクリプトを実行する必要があります (そのため、ノード サーバーが稼働しています)。

次のようにスクリプトを /etc/rc.local ファイルに追加しました。

sh /var/www/init_node.sh 
exit 0

しかし、インスタンスを再起動すると、nodejs サーバーは実行されません。これは Ubuntu 64 インスタンスです。

重要ではないと思いますが、私の sh ファイルの内容は次のとおりです。

cd /var/www/myproject
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa
git stash
git pull origin master --force
forever start express.js 

また

sh /etc/rc.local 

正常に動作します

何か案は?

答え1

Amazon インスタンスの rc.local ファイルでも同様の問題が発生しました。 rc.local のスクリプトにエラーがあり、tty がないと実行できないことが判明しました。

では、同様のエラーが発生しているかどうかを確認するにはどうすればよいでしょうか? cloud-init を使用してスクリプトを実行します。

私の Amazon Linux ディストリビューションでは、まず を編集しました/etc/init.d/cloud-init-user-scripts

この行を変更する /usr/bin/cloud-init-run-module once-per-instance user-scripts execute run-parts ${SCRIPT_DIR} >/dev/null && success || failure

「いつも」

/usr/bin/cloud-init-run-module always user-scripts execute run-parts ${SCRIPT_DIR} >/dev/null && success || failure

次に、ディレクトリを作成しますmkdir /var/lib/cloud/data/scripts。起動時に実行するスクリプトを にコピーします/var/lib/cloud/data/scripts。スクリプトの実行可能ビットが設定されていることを確認します。

これで、.. を実行できるはずですsudo /etc/init.d/cloud-init-user-scripts start。その後、エラーを確認できます/var/log/cloud-init.log

関連情報