无法在 EC2 启动时运行 bash 脚本

无法在 EC2 启动时运行 bash 脚本

我浏览过各种资源并尝试过各种方法,但都无济于事。

情况如下;

我有一个运行 node.js 应用程序的 EC2 实例。我还想在后台运行一个 bash 脚本(中间睡眠的循环),该脚本检查节点应用程序的 git 存储库是否有任何新更改。

在我的实例的用户数据部分,我有这个;

#!/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在脚本的顶部有)。

提前致谢。

答案1

通过在我的 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-dataEC2 实例中的内容如下:

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

相关内容