我使用 Cloudflare API 脚本通过 crontab 更新我的 Raspberry PI 上的 DDNS。 shell 脚本在 Debian 中工作正常,但在 CentOS/Fedora 中失败。在终端中运行时,它可以工作。
我检查了ip addr无法获取数据,但无法解决。我尝试用主机名 -I 代替 ip addr,然后效果很好。
但我想知道为什么 ip 无法在 .sh/bash shell 脚本中工作?
Ferora 28 服务器覆盆子。 我尝试了很多可以通过谷歌搜索的解决方案,但没有一个有效。
#!/bin/bash
#this works
ip=$(hostname -I | awk '{print $NF;exit}')
echo $ip>>/usr/local/bin/cloudflare.log
#this fail
ips=$(ip route get 1:: | awk '{print $(NF-4);exit}')
echo $ips>>/usr/local/bin/cloudflare.log
# crontab -l
#automatic update ddns per 1 min
* */1 * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1
cat cloudflare.log
xx.xx.xxx.xx
<Blank_None>
最佳答案
crontab 未设置 PATH,因此无法找到二进制文件。在脚本顶部添加 PATH,或在 crontab 顶部添加导出。
# for example
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
关于bash - ip 命令无法在 crontab 的 shell 脚本中获取 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294204/