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.
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.
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
?
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.
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
.
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.