Não é possível executar o script bash na inicialização do EC2

3

Eu escaneei vários recursos e tentei várias coisas, mas sem sucesso.

Aqui está a situação;

Eu tenho uma instância do EC2 que executa um aplicativo node.js. Também quero executar um script bash (Um loop com suspensão intermediária) em segundo plano, que verifica se há novas alterações no repositório git do aplicativo do nó.

Na parte de dados do usuário da minha instância, eu tenho isso;

#!/bin/bash
su - ec2-user -c 'cd sample-node-app; node index.js'
su - ec2-user -c 'bash /home/ec2-user/check_git.sh &'

O script, adaptado de aqui

#!/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
  • Sugestões experimentadas de aqui , aqui e adicionando o caminho do arquivo a rc.local . Quando eu fiz a parte rc.local , o aplicativo do nó terminou automaticamente em cada inicialização.
  • Ter permissões definidas para o script usando chmod +x check_git.sh .
  • Variações experimentadas da entrada de dados do usuário, como bash /home/ec2-user/check_git.sh e ./check_git.sh (tenho #!/bin/bash na parte superior do script).

Obrigado antecipadamente.

    
por MNS 02.12.2017 / 16:43

1 resposta

1

Gerenciado para que funcione adicionando o seguinte aos meus dados de usuário do 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'

Ainda não encontrei um motivo pelo qual ele funcione, mas trabalhe nisso.

EDITAR

Eu consegui quebrar o acima por algum motivo. Trabalhou às vezes, mas não de forma consistente. Eventualmente, eu recorri ao seguinte;

Em check_git.sh , tenho uma declaração if para verificar e executar o aplicativo:

if ! pgrep -x "node" > /dev/null
then
    node index.js &
fi

E o seguinte em user-data da instância do EC2:

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