起動時にリポジトリを確認し、常に起動ノードスクリプトを使用するように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.sh
git 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