Tengo el siguiente script en el directorio de inicio de mi usuario
#!/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"
y la siguiente entrada en el crontab de mi usuario (no en el crontab raíz)
@reboot /home/myuser/startup.sh > /home/myuser/restart.log 2>&1
Si ejecuto el comando yo mismo veo el siguiente resultado
> ./startup.sh
Using HOST_IP=192.168.1.15
Pero si reinicio la máquina y luego inspecciono restart.log
veo
> cat ./restart.log
Using HOST_IP=
Estoy usando la ruta completa a los comandos ip
y grep
, así que no entiendo por qué no obtengo ningún valor para la variable de entorno cuando se ejecuta desde el crontab.
Respuesta1
Tu @reboot
trabajo cron se ejecutaantes de establecer la dirección.
Un enfoque más confiable sería ejecutar el script desde el mecanismo de enlace "post-up" de su configurador de red, por ejemplo, a través de /etc/NetworkManager/dispatcher.d
.