Crontabシェルスクリプトgit pullと永久に起動

Crontabシェルスクリプトgit pullと永久に起動

起動時にリポジトリを確認し、常に起動ノードスクリプトを使用するようにRaspberry Piを設定しようとしています。

2番目の部分はうまくいきましたが、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

関連情報