我有一个启动节点服务器的“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
错误。