我正在尝试设置 Raspberry Pi 以在启动时检查存储库,然后使用永远启动节点脚本。
我让第二部分工作了,但我尝试了十几个 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 pull 设置了一个别名,就像建议的那样 git up ,但我认为这可能是我的问题,所以我回到了最简单的版本。仍然没有成功。
欢迎任何意见。
编辑: 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