Recarrega um script local a partir de um código fonte disponível para URL?

0

Eu tenho um script longo (> 500 linhas) carregado em cada inicialização de uma página da Web, a partir de um arquivo local. O código-fonte deste script é frequentemente atualizado e apresentado sob uma determinada URL para que todos os usuários possam atualizar seus arquivos locais que o contêm (porque é muito pesado, muitos preferem carregá-lo localmente).

Não atualizar esse script freqüentemente expõe meu site a violações de segurança, mas em vez de copiar e colar os dados toda vez que um novo for atualizado, quero recarregá-lo em meu local automaticamente com uma tarefa Cron (digamos 0 0 1 * 0 ).

Existe uma maneira no Unix de copiar e colar todos os dados de um script acessível por URL em um arquivo de script local?

Eu acho que isso incluirá uma reescrita como << EOF > ... EOF Mas desta vez, não da minha própria entrada padrão local no prompt do Bash, mas sim de um arquivo remoto.

    
por JohnDoea 07.12.2016 / 11:13

1 resposta

2

Existem pelo menos 2 maneiras possíveis de fazer isso:

Way 1 - Use o curl em um cron job:

Use curl (instale-o se ainda não estiver instalado). curl baixa arquivos usando qualquer um dos protocolos usuais - HTTP, HTTPS, FTP. Você poderia usar curl em uma tarefa cron para fazer o download de uma nova cópia do script periodicamente. Use man curl para detalhes de invocação.

curl -o /path/to/script http://www.example.com/script

Você pode querer baixar o script com um nome diferente do script que é executado na produção e quando o download obtiver mv sobre o script de produção; isso é para evitar qualquer problema, caso o script seja chamado no meio do download.

Way 2 - Use um script Wrapper:

Grave um wrapper que baixe o script, se necessário, e, em seguida, exec s ou o chame (dependendo da linguagem de script). O exemplo é escrito em Bash para que a lógica seja facilmente compreensível; para outras linguagens de script, você terá que se adaptar. Por exemplo, suponha que o script local seja denominado real-script e o URL seja http://www.example.com/real-script . O wrapper pode ser wrapper-script :

#! /bin/bash

if [ -f /path/to/real-script ] ; then
# Local copy exists, download only if remote file is newer
  curl -z /path/to/real-script -o /path/to/real-script http://www.example.com/real-script
else
# Local copy does not exist, always download
  curl -o /path/to/real-script http://www.example.com/real-script
fi
chmod 755 /path/to/real-script
exec /path/to/real-script "$@"

Chame esse script de wrapper como se fosse o script real; o wrapper baixará o script real se não houver cópia local ou se a cópia local for mais antiga que o arquivo remoto; então executará a cópia atualizada garantida passando quaisquer argumentos.

Você também pode querer evitar procurar por uma versão mais recente se a cópia local existente não tiver mais de cinco minutos, ou qualquer intervalo de tempo que você permitir.

Observe que, ao usar esse método na produção, provavelmente será necessária alguma verificação de erros.

    
por 07.12.2016 / 17:19