O problema é que quase certamente que sua tarefa @reboot
cron tenha iniciado antes que suas interfaces de rede tenham chegado código%. Esta é, em geral, uma falha bem documentada de up
. não significa que cron
facility é inútil, apenas significa que você precisa entender como ele funciona e como resolvê-lo quando ele falha - como tem no seu caso ( provavelmente :).
Existem pelo menos 2 maneiras de fazer isso:
- use
@reboot
em seu trabalho @reboot para dar à rede mais tempo para obtersleep
. Sua entradaup
será parecida com esta::
@reboot sleep 10; /your/bash/script/as-it-is-now
Eu sugeri o valor de crontab
aqui para dar à interface 10 segundos para vir 10
; YMMV, então experimente com valores diferentes.
- seguindo a sugestão do @confetti (e com agradecimentos ao @Celada), coloque seu script em
up
. A seguir, um protótipo que pode ser útil. Observe que ele é executado somente na primeira vez em que seu sistema é exibido (como/etc/network/if-up.d
e NOT toda vez que a interface de rede é trazida@reboot
):
#!/bin/sh
NWKSTATUS=/var/run/the-network-is-up
# note that /var/run is a temp fs, and so a system shutdown
# will effectively erase our flag file, 'the-network-is-up'case "$IFACE" in
lo)
# Exclude the loopback interface; we won't consider it
# as it's not a true interface. We set the flag only
# when a true network interface comes up
exit 0
;;
*)
;; esac# if the flag file exists, we're done here
# otherwise, we'll create itif [ -e $NWKSTATUS ]; then exit 0
else
touch $NWKSTATUS
fi# add your script here...
Então - coloque todos os itens acima em um arquivo (por exemplo, up
), salve-o na pasta setnwkstatus.sh
e torne-o executável (por exemplo, /etc/network/if-up.d/
)