使用 /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 作業運行在設定地址之前。

更可靠的方法是從網路配置器的“post-up”掛鉤機制運行腳本,例如通過/etc/NetworkManager/dispatcher.d.

相關內容