Eu tenho o seguinte script no diretório inicial do meu usuário
#!/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"
e a seguinte entrada no crontab do meu usuário (não no crontab raiz)
@reboot /home/myuser/startup.sh > /home/myuser/restart.log 2>&1
Se eu mesmo executar o comando, vejo a seguinte saída
> ./startup.sh
Using HOST_IP=192.168.1.15
Mas se eu reiniciar a máquina e depois inspecionar, restart.log
vejo
> cat ./restart.log
Using HOST_IP=
Estou usando o caminho completo para os comandos ip
e grep
, então não entendo por que não estou obtendo nenhum valor para a variável de ambiente quando ela é executada a partir do crontab.
Responder1
Seu @reboot
cron job é executadoantes que o endereço seja definido.
Uma abordagem mais confiável seria executar o script a partir do mecanismo de gancho "post-up" do seu configurador de rede, por exemplo, via /etc/NetworkManager/dispatcher.d
.