Script de shell do Crontab git pull e para sempre inicie

3

Estou tentando configurar um Raspberry Pi para verificar um repositório na inicialização e, em seguida, disparar um script de nó para sempre.

Eu tenho a segunda parte funcionando, mas eu tentei uma dúzia de comandos git sem sucesso.

Aqui está o meu crontab que eu acesso assim:

crontab -u pi -e

@reboot /bin/sh /home/pi/code/script.sh

Agora meu script tem -rwxr-xr-x direitos de acesso e é assim:

#!/bin/sh
cd /home/pi/code
/usr/bin/sudo -u pi -H /usr/bin/git pull origin master

/usr/bin/sudo -u pi -H /home/pi/.nvm/v0.11.11/bin/forever start /home/pi/code/server.js

Forever inicia o server.js na reinicialização, não há problema, mas o repositório nunca é atualizado. Se eu rodar o script usando sh /home/pi/code/script.sh ele aciona o git pull corretamente ... Inicialmente eu configurei um alias para git pull ser git up como é recomendado, mas achei que poderia ser o meu problema e voltei para a versão mais simples que pude. Ainda sem sucesso.

Qualquer entrada é bem-vinda.

EDIT: a saída do crontab indica um problema de conectividade: Could not resolve host: bitbucket.org Como posso esperar que a rede seja configurada antes de executar o script?

    
por LukeS 02.03.2016 / 08:47

2 respostas

1

Depois de obter ajuda para depurar e testar a solução da Phlogi sem sucesso, decidi voltar ao crontab original e adicionar código para aguardar a interface de rede estar pronta. Aqui está o que o script parece agora:

#!/bin/sh

while ! ping -c 1 -W 1 bitbucket.org; do
    echo "Waiting for bitbucket - network interface might be down..."
    sleep 1
done

cd /home/pi/code && /usr/bin/sudo -u pi -H git checkout master && /usr/bin/sudo -u pi -H git up

/usr/bin/sudo -u pi -H /home/pi/.nvm/v0.11.11/bin/forever start    /home/pi/code/server.js
    
por 02.03.2016 / 10:54
1

Em vez de usar o crontab, você deve criar um serviço simples que depende da rede:

#!/bin/bash
# /etc/init.d/XY

### BEGIN INIT INFO
# Provides:          XY
# Required-Start:    $syslog $network
# Required-Stop:     $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This service is used to start XY
### END INIT INFO


case "$1" in 
    start)
        echo "Updating XY"
        cd /home/pi/code
        /usr/bin/sudo -u pi -H /usr/bin/git pull origin master
        echo "Starting server.js"
        /usr/bin/sudo -u pi -H /home/pi/.nvm/v0.11.11/bin/forever start /home/pi/code/server.js
        ;;
    stop)
        echo "Stopping XY"

        ;;
    *)
        echo "Usage: /etc/init.d/XY start|stop"
        exit 1
        ;;
esac
exit 0

Coloque-o na pasta de serviços e torne-o executável:

sudo chmod +x /etc/init.d/XY
    
por 02.03.2016 / 09:59