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
Quand j'exécute ceci, il effectue un wget sur l'url du site et achemine STDOUT / STDERR vers / dev / null. Lorsque j'exécute cette commande à partir d'une ligne de commande, cela fonctionne correctement et ne génère pas de fichier index.html dans mon répertoire personnel.
Lorsqu'il est exécuté à partir de cron, il crée un nouveau fichier index.html toutes les cinq minutes, me laissant ainsi une tonne de fichiers d'index que je ne souhaite pas.
Ma syntaxe est-elle incorrecte pour l'exécution du travail cron? A partir d'une ligne de commande, cela fonctionne sans problème, mais à partir de cron, il génère un fichier index.html dans mon répertoire personnel.
Je suis sûr que je fais une simple erreur, je serais reconnaissant si quelqu'un pouvait aider.
wget
partir d'un terminal et le reste est si une barre de progression est affichée.Réponses:
Vous pouvez le faire comme ceci:
Ici
-O
envoie le fichier téléchargé à/dev/null
et se-o
connecte à la/dev/null
place de stderr. De cette façon, la redirection n'est pas du tout nécessaire.la source
Devez-vous réellement télécharger le contenu ou simplement recevoir le 200 OK? Si vous devez seulement que le serveur traite la demande, pourquoi ne pas simplement utiliser l'
--spider
argument?la source
Je voudrais utiliser les éléments suivants:
L'
-O -
option permet de s'assurer que le contenu récupéré est envoyé à stdout.la source
foo > /dev/null 2>&1
écriture est plus concisefoo &> /dev/null
.bash
. Danssh
, qui est généralement utilisé par cron, la redirection esperluette ne fonctionne pas.Vous dites que vous avez uniquement besoin de la réponse "200 OK" dans un commentaire.
Cela permet une solution avec des avantages supplémentaires par rapport à ceux de
wget -O /dev/null -o /dev/null example.com
. L'idée n'est pas de supprimer la sortie d'une certaine manière, mais de ne créer aucune sortie du tout.Le fait que vous n'ayez besoin que de la réponse signifie que les données 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 de manière à tout faire sauf le télécharger, il existe une commande spéciale "HEAD".
Lorsque vous utilisez «GET» pour cette tâche, le document est téléchargé et supprimé localement. Utiliser "HEAD" fait exactement ce dont vous avez besoin, il ne transfère pas le document en premier lieu. Il retournera toujours le même code de résultat que "GET", par définition.
La syntaxe à utiliser la méthode
HEAD
avecwget
est un peu étrange: nous avons besoin d'utiliser l'option--spider
. Dans ce contexte, il fait juste ce que nous voulons - accédez à l'URL avec "HEAD" au lieu de "GET".Nous pouvons utiliser l’option
-q
(quiet) pour newget
pas afficher les détails de ce qu’elle fait.Combinant cela,
wget
ne produira rien dans stderr, ni ne sauvera un document.wget -q --spider 'http://example.com/'
Le code de sortie nous indique si la demande a abouti ou non:
Pour une commande dans
crontab
, le fait qu'il n'y ait pas de sortie dans les deux cas signifie que vous pouvez utiliser obtenir l'absence de sortie pour indiquer à nouveau des erreurs.Votre exemple de commande serait changé en ceci:
Cela a 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 la sortie du document ne sont pas générées, mais générées et ignorées localement. Bien sûr, la grande différence est d’éviter de télécharger puis de jeter le documentindex.html
.la source
Peut-être que votre question devrait être à ce sujet, la page Web dit:
Cela ne devrait pas nécessiter de scripts keepalive.
Sinon, la solution de kasperd est parfaite.
la source
wget
commandes. Dans de nombreuses situations, la nécessité de garder les messages en vie est le symptôme d'un défaut de conception sous-jacent, qu'il convient de corriger. Mais même si tous ces problèmes sont résolus, il restera quelques cas où un message de maintien en vie est la bonne solution. Même si les messages Keep Alive ne sont pas nécessaires, le travail cron peut néanmoins constituer une partie utile d'une configuration de surveillance.