![使用 /bin/ip 命令在 cronjob 中取消设置插入的环境变量](https://linux22.com/image/1550079/%E4%BD%BF%E7%94%A8%20%2Fbin%2Fip%20%E5%91%BD%E4%BB%A4%E5%9C%A8%20cronjob%20%E4%B8%AD%E5%8F%96%E6%B6%88%E8%AE%BE%E7%BD%AE%E6%8F%92%E5%85%A5%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我的用户主目录中有以下脚本
#!/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
您的@reboot
cron 作业运行在设置地址之前。
更可靠的方法是从网络配置器的“发布”挂钩机制运行脚本,例如通过/etc/NetworkManager/dispatcher.d
。