在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错误。

相关内容