53 votes

Transférer la sortie de wget vers /dev/null dans cron

J'exécute la commande suivante toutes les 5 minutes dans ma crontab pour maintenir Phusion Passenger en vie.

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

Lorsque je l'exécute, il effectue un wget sur l'url du site et renvoie STDOUT/STDERR vers /dev/null. Lorsque je l'exécute à partir d'une ligne de commande, cela fonctionne bien et ne produit pas de fichier index.html dans mon répertoire personnel.

Lorsqu'il est exécuté par cron, il crée un nouveau fichier index.html toutes les cinq minutes, ce qui me laisse avec une tonne de fichiers index dont je ne veux pas.

Ma syntaxe est-elle incorrecte pour exécuter la tâche cron ? À partir d'une ligne de commande, cela fonctionne sans problème, mais à partir de cron, cela génère un fichier index.html dans mon répertoire personnel.

Je suis sûr que je fais une simple erreur, j'apprécierais si quelqu'un pouvait m'aider.

81voto

martin Points 49

Vous pourriez le faire comme ça :

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

Ici -O envoie le fichier téléchargé à /dev/null y -o les journaux à /dev/null au lieu de stderr. De cette façon, la redirection n'est pas du tout nécessaire.

21voto

Ben Bolker Points 50041

Devez-vous télécharger réellement le contenu ou simplement recevoir le 200 OK ? Si vous devez seulement faire en sorte que le serveur traite la requête, pourquoi ne pas utiliser simplement la méthode --spider argument ?

10voto

Peter Lamby Points 251

J'utiliserais les éléments suivants :

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

El -O - permet de s'assurer que le contenu récupéré est envoyé à stdout.

7voto

Volker Siegel Points 175

Vous dites que vous n'avez besoin que de la réponse "200 OK" dans un commentaire.

Cela permet de trouver une solution présentant des avantages supplémentaires par rapport aux solutions suivantes
wget -O /dev/null -o /dev/null example.com . L'idée n'est pas de rejeter le résultat d'une manière ou d'une autre, mais de ne pas créer de résultat du tout.

Le fait que vous n'ayez besoin que de la réponse signifie que les données qui sont téléchargées dans le fichier local index.html n'ont pas besoin d'être téléchargées en premier lieu.
Dans le protocole HTTP, la commande 'GET' est utilisée pour télécharger un document . Pour accéder à un document d'une manière qui fait tout sauf Pour télécharger le document, il existe une commande spéciale "HEAD".
Si vous utilisez "GET" pour cette tâche, le document est téléchargé et jeté localement. L'utilisation de "HEAD" fait exactement ce dont vous avez besoin, mais ne transfère pas le document en premier lieu. Elle renverra toujours le même code de résultat que 'GET', par définition.

La syntaxe pour utiliser la méthode HEAD con wget est un peu bizarre : nous devons utiliser l'option --spider . Dans ce contexte, il fait simplement ce que nous voulons - accéder à l'URL avec 'HEAD' au lieu de 'GET'.
Nous pouvons utiliser l'option -q (calme) pour faire wget ne fournit pas de détails sur ce qu'il fait.

En combinant cela, wget ne sortira rien sur stderr, ni ne sauvegardera un document.

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

Le code de sortie nous indique si la requête a réussi ou non :

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

Pour une commande dans crontab le fait qu'il n'y ait pas de sortie dans les deux cas signifie que vous pouvez à nouveau utiliser l'absence de sortie comme une indication d'erreurs.

Votre exemple de commande serait modifié comme suit :

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

Cela présente les mêmes avantages que wget -O /dev/null -o /dev/null example.com . L'avantage supplémentaire est que la sortie du journal et du document n'est pas générée, mais générée et jetée localement. Bien sûr, la grande différence est d'éviter de télécharger puis de jeter le document, index.html .

3voto

user237113 Points 31

pour garder Phusion Passenger en vie.

Votre question devrait peut-être porter sur ce point, indique la page web :

Un serveur web et un serveur d'applications rapides et robustes pour

Cela ne devrait pas nécessiter de scripts de survie.

Sinon, la solution de kasperd est parfaite.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X