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