Невозможно запустить bash-скрипт при запуске EC2
Я сканировал различные ресурсы и пробовал разные вещи, но безрезультатно.
Вот ситуация;
У меня есть экземпляр EC2, который запускает приложение node.js. Я также хочу запустить 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'