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

1

Ваше @reboot cron запускается до того, как адрес будет установлен.

Более надежным подходом было бы запустить скрипт из механизма ловушек «после запуска» вашего сетевого конфигуратора, например, через /etc/NetworkManager/dispatcher.d .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .