我浏览过各种资源并尝试过各种方法,但都无济于事。
情况如下;
我有一个运行 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-data
EC2 实例中的内容如下:
#!/bin/bash
sudo rm -rf /var/lib/cloud/*
su - ec2-user -c 'bash /home/ec2-user/check_git.sh'