我的用户主目录中有以下脚本
#!/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
。