/bin/ip コマンドを使用して cronjob で補間された環境変数が設定されていません

/bin/ip コマンドを使用して cronjob で補間された環境変数が設定されていません

myuserのホームディレクトリに次のスクリプトがあります

#!/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

cron@rebootジョブが実行されますアドレスが設定される前に。

より信頼性の高い方法は、たとえば を介して、ネットワーク コンフィギュレータの「post-up」フック メカニズムからスクリプトを実行することです/etc/NetworkManager/dispatcher.d

関連情報