wget salvando arquivos como arquivos de texto simples em branco na inicialização

3

Eu tenho um script bash no crontab que roda o @reboot:

O próprio script contém um comando wget para puxar e baixar um arquivo da Internet

Quando executo meu script depois de entrar e abrir o terminal, ele funciona e salva os arquivos corretamente (html, png). Mas quando eu reinicio meu sistema, ele salva as execuções e as salva como arquivos de texto simples sem conteúdo.

Resolvido

- > Eu usei a função sleep no crontab e funciona !!!

Novo no linux e no código, então obrigado por todo o feedback! Eu vou explorar as opções do /etc/network/if-up.d/ também.

    
por user303148 01.08.2018 / 04:52

2 respostas

1

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:

  1. use @reboot em seu trabalho @reboot para dar à rede mais tempo para obter sleep . Sua entrada up 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.

  1. 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 it

if [ -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/ )

    
por 01.08.2018 / 19:35
1

O mais provável é que a interface de rede não esteja ativa no momento em que cron tentar executar seu script.

Você pode fazer o script ser executado depois que a interface de rede estiver ativa.

Coloque seu script em /etc/network/if-up.d e defina chmod +x para que ele possa ser executado. Toda vez que uma interface de rede aparece, todos os scripts são executados.

    
por 01.08.2018 / 06:28