Estou executando o seguinte comando a cada 5 minutos no meu crontab para manter o Phusion Passenger vivo.
*/5 * * * * wget mysite.com > /dev/null 2>&1
Quando executo isso, ele executa um wget nas rotas de URL do site 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.
Minha sintaxe está incorreta para executar o trabalho cron? A partir de uma linha de comando, ele funciona sem problemas, mas a partir do cron gera um arquivo index.html no meu diretório pessoal.
Tenho certeza de que estou cometendo um erro simples, agradeceria se alguém pudesse ajudar.
wget
partir de um terminal e o contrário é se uma barra de progresso é exibida.Respostas:
Você poderia fazer assim:
Aqui
-O
envia o arquivo baixado para/dev/null
e-o
registra para, em/dev/null
vez de stderr. Dessa forma, o redirecionamento não é necessário.fonte
Você realmente precisa 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 usar simplesmente o
--spider
argumento?fonte
Eu usaria o seguinte:
A
-O -
opção garante que o conteúdo buscado seja enviado ao stdout.fonte
foo > /dev/null 2>&1
está escrito de forma mais concisa comofoo &> /dev/null
.bash
. Emsh
, que geralmente é o que o cron usa, o redirecionamento e comercial não funciona.Você diz que precisa apenas da resposta "200 OK" em um comentário.
Isso permite a solução com algumas vantagens adicionais sobre as de
wget -O /dev/null -o /dev/null example.com
. A idéia não é descartar a saída de alguma forma, mas não criar nenhuma saída.O fato de você precisar apenas da 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 uma maneira que faça tudo, exceto o download do documento, existe um comando especial 'HEAD'.
Ao usar 'GET' para esta tarefa, o documento é baixado e descartado localmente. Usar 'HEAD' faz exatamente o que você precisa; ele não transfere o documento em primeiro lugar. Sempre retornará o mesmo código de resultado que 'GET', por definição.
A sintaxe para usar o método
HEAD
comwget
é um pouco estranho: é preciso usar a opção--spider
. Nesse contexto, ele apenas faz o que queremos - acesse a URL com 'HEAD' em vez de 'GET'.Podemos usar a opção
-q
(quiet) parawget
não produzir detalhes sobre o que ele 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:
Para um comando in
crontab
, o fato de não haver saída nos dois casos significa que você pode usar a obtenção de saída como uma indicação de erros novamente.Seu comando de exemplo seria alterado para isso:
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 que a grande diferença é evitar o download e descartar o documentoindex.html
,.fonte
Que sua dúvida seja sobre isso, a página diz:
Isso não deve exigir scripts de manutenção de atividade.
Caso contrário, a solução da Kasperd é perfeita.
fonte
wget
comandos. Em muitas situações, a necessidade de manter mensagens vivas é um sintoma de uma falha de design subjacente que deve ser corrigida. Mas mesmo se todos eles forem corrigidos, ainda haverá alguns casos em que uma mensagem keep alive é a solução certa. Mesmo que as mensagens keep alive não sejam necessárias, o trabalho cron ainda pode ser uma parte útil de uma configuração de monitoramento.