Crontab 쉘 스크립트 git pull 및 영구적으로 시작

Crontab 쉘 스크립트 git pull 및 영구적으로 시작

부팅 시 저장소를 확인한 다음 항상 시작 노드 스크립트를 사용하도록 Raspberry Pi를 설정하려고 합니다.

두 번째 부분은 작동했지만 12개의 git 명령을 시도했지만 성공하지 못했습니다.

이것은 내 crontab이며 다음과 같이 액세스할 수 있습니다.

crontab -u pi -e

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

이제 내 스크립트에는 -rwxr-xr-x다음과 같은 액세스 권한이 있습니다.

#!/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

Server.js는 다시 시작할 때 항상 시작되며 문제 없습니다. 하지만 저장소는 업데이트되지 않습니다. 이를 사용하여 스크립트를 실행하면 sh /home/pi/code/script.shgit pull이 올바르게 실행됩니다. 처음에는 git up에서 제안한 대로 git pull에 대한 별칭을 설정했지만 이것이 내 문제일 수도 있다고 생각하여 가장 간단한 버전으로 돌아갔습니다. 아직도 성공하지 못했습니다.

어떤 의견이라도 환영합니다.

편집: crontab의 출력은 연결 문제를 나타냅니다. Could not resolve host: bitbucket.org스크립트를 실행하기 전에 네트워크가 설정될 때까지 어떻게 기다리나요?

답변1

디버깅 도움을 받고 Phlogi의 솔루션을 시도했지만 성공하지 못한 후 원래 crontab으로 돌아가서 네트워크 인터페이스가 준비될 때까지 기다리는 코드를 추가하기로 결정했습니다. 이제 스크립트는 다음과 같습니다.

#!/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

답변2

crontab을 사용하는 대신 네트워크에 의존하는 간단한 서비스를 만들어야 합니다.

#!/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

서비스 폴더에 넣고 실행 가능하게 만듭니다.

sudo chmod +x /etc/init.d/XY

관련 정보