Crontab shell 脚本 git pull 并永久启动

Crontab shell 脚本 git pull 并永久启动

我正在尝试设置 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

相关内容