我的用戶主目錄中有以下腳本
#!/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 作業運行在設定地址之前。
更可靠的方法是從網路配置器的“post-up”掛鉤機制運行腳本,例如通過/etc/NetworkManager/dispatcher.d
.