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

220
Matt Phillips

У меня есть следующий скрипт в домашнем каталоге 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команды, так что я не понимаю, почему я не получаю никакого значения для переменного окружения при запуске из кронтаба?

0

1 ответ на вопрос

1
grawity

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

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

В итоге я создал системный файл systemd для запуска моего скрипта, и это сработало отлично. Благодарю. Matt Phillips 6 лет назад 0

Похожие вопросы