使用 /bin/ip 命令在 cronjob 中取消设置插入的环境变量

使用 /bin/ip 命令在 cronjob 中取消设置插入的环境变量

我的用户主目录中有以下脚本

#!/bin/bash
# startup.sh
export HOST_IP=$(/bin/ip -4 addr show enp2s0 | /bin/grep -Po 'inet \K[\d.]+')
echo "Using HOST_IP=$HOST_IP"

以及我用户的 crontab(不是根 crontab)中的以下条目

@reboot /home/myuser/startup.sh > /home/myuser/restart.log 2>&1

如果我自己运行该命令,我会看到以下输出

> ./startup.sh
Using HOST_IP=192.168.1.15

但如果我重新启动机器然后检查,restart.log我会看到

> cat ./restart.log
Using HOST_IP=

ip我正在使用和命令的完整路径grep,所以我不明白为什么当从 crontab 运行时环境变量没有值?

答案1

您的@rebootcron 作业运行在设置地址之前。

更可靠的方法是从网络配置器的“发布”挂钩机制运行脚本,例如通过/etc/NetworkManager/dispatcher.d

相关内容