Интерполированная переменная среды не установлена ​​в cronjob с помощью команды /bin/ip

Интерполированная переменная среды не установлена ​​в cronjob с помощью команды /bin/ip

У меня есть следующий скрипт в домашнем каталоге пользователя 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 (не в root 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.

Связанный контент