bash - ip 命令无法在 crontab 的 shell 脚本中获取 IP 地址

标签 bash shell cron

我使用 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/

相关文章:

linux - 通过 ssh 使用 watch

java - Quartz调度器不工作

bash - 在 shell 脚本中定义一个 Increment 变量,该变量在每个 cronjob 上递增

bash - 在 bash 中添加(收集)退出代码

bash - 如何在 bash 中转义感叹号?

linux - linux中移动文件的自定义命令

bash - 实现进度条

linux - bash 中的 If then elif then else 语句

linux - 整合sed命令

magento - Magento 上的 Cron 作业无法正常工作