Piping wget output para / dev / null no cron

32

Estou executando o seguinte comando a cada 5 minutos no meu crontab para manter o Phusion Passenger ativo.

*/5 * * * * wget mysite.com > /dev/null 2>&1

Quando executo isso, ele executa um wget no URL do site, encaminhando STDOUT / STDERR para / dev / null. Quando executo isso a partir de uma linha de comando, ele funciona bem e não produz um arquivo index.html no meu diretório pessoal.

Quando é executado a partir do cron, ele cria um novo arquivo index.html a cada cinco minutos, deixando-me com uma tonelada de arquivos de índice que eu não quero.

A minha sintaxe está incorreta para executar o cron job? A partir de uma linha de comando funciona sem problemas, mas a partir do cron gera um arquivo index.html no meu diretório home.

Tenho certeza de que estou cometendo um erro simples, agradeceria se alguém pudesse ajudar.

    
por nulltek 11.08.2014 / 15:05

5 respostas

55

Você poderia fazer assim:

*/5 * * * * wget -O /dev/null -o /dev/null example.com

Aqui -O envia o arquivo baixado para /dev/null e -o logs para /dev/null em vez de stderr. Dessa forma, o redirecionamento não é necessário.

    
por 11.08.2014 / 15:20
16

Você precisa realmente baixar o conteúdo ou apenas receber o 200 OK? Se você precisa apenas que o servidor processe a solicitação, por que não simplesmente usar o argumento --spider ?

    
por 11.08.2014 / 16:03
8

Eu usaria o seguinte:

/5 * * * * wget -O - mysite.com > /dev/null 2>&1

A opção -O - garante que o conteúdo buscado seja enviado para a stdout.

    
por 11.08.2014 / 15:14
4

Você diz que precisa apenas da resposta "200 OK" em um comentário.

Isso permite solução com algumas vantagens adicionais sobre as de wget -O /dev/null -o /dev/null example.com . A ideia não é descartar a saída de alguma forma, mas não criar nenhuma saída.

O fato de você precisar apenas de resposta significa que os dados baixados no arquivo local index.html não precisam ser baixados em primeiro lugar.
No protocolo HTTP, o comando 'GET' é usado para baixar um documento . Para acessar um documento de forma que faça tudo exceto baixando o documento, existe um comando especial 'HEAD'.
Ao usar 'GET' para essa tarefa, o documento é baixado e descartado localmente. Usando 'CABEÇA' faz exatamente o que você precisa, não transfere o documento em primeiro lugar. Ele sempre retornará o mesmo código de resultado que 'GET', por definição.

A sintaxe para usar o método HEAD com wget é um pouco estranha: precisamos usar a opção --spider . Neste contexto, apenas faz o que queremos - acesse a URL com 'HEAD' em vez de 'GET'.
Podemos usar a opção -q (silenciosa) para fazer com que wget não exiba detalhes sobre o que ela faz.

Combinando isso, wget não produzirá nada para stderr, nem salvará um documento.

wget -q --spider 'http://example.com/'

O código de saída informa se a solicitação foi bem-sucedida ou não:

$ wget -q --spider 'http://example.com/'
$ echo $?
0
$ wget -q --spider 'http://example.com/nonexisting'
$ echo $?                                          
8

Para um comando em crontab , o fato de não haver saída em ambos os casos significa que você não pode obter nenhuma saída como indicação de erros novamente.

Seu comando de exemplo seria alterado para:

*/5 * * * * wget -q --spider mysite.com

Isso tem as mesmas vantagens que wget -O /dev/null -o /dev/null example.com . A vantagem adicional é que a saída do log e a saída do documento não são geradas, em vez de geradas e descartadas localmente. Ou, claro, a grande diferença é evitar o download e, em seguida, descartar o documento, index.html .

    
por 17.08.2014 / 04:04
2

to keep Phusion Passenger alive.

Sua pergunta deve ser sobre isso, a página diz:

A fast and robust web server and application server for

Isso não deve exigir nenhum script de keepalive.

Caso contrário, a solução de kasperd é perfeita.

    
por 11.08.2014 / 18:50