Comment utiliser curl dans un travail cron?

12

J'ai besoin de configurer un travail cron dans cpanel qui appelle une URL (sur le même serveur) une fois par semaine. J'allais utiliser wget mais il s'avère que cela est désactivé sur le serveur partagé utilisé.

Existe-t-il une alternative à wget ? J'ai entendu dire que curl peut être utilisé mais je ne sais pas comment le configurer dans une commande cron.

De plus, quelle est la commande pour que le cronjob ne fasse rien à la fin?

Toutes les idées grandement appréciées!

davidhyland
la source
1
Que ferait le wget si vous pouviez l'utiliser?
user9517
Pourquoi autoriseraient-ils curl au cas où ils auraient désactivé wget?
andol
@Iain - il est nécessaire de traiter un script PHP
davidhyland
@Andol - très bonne question. c'est comme ça
davidhyland

Réponses:

20

au lieu d'utiliser wget, curl fonctionne comme ceci:

curl --silent http://domain.com/cron.php

qui fonctionnera de la même manière que wget. si c'est un fichier php que vous lancez, y a-t-il une raison pour que vous ne puissiez pas l'exécuter via l'interpréteur php en ligne de commande comme ceci:

php -q /path/to/cron.php

même sur une demande de serveur Web et fonctionne souvent beaucoup plus rapidement et sans certaines restrictions de délai d'attente lorsqu'il est appelé via le serveur Web / curl

anthonysomerset
la source
L'appel de curl de cette façon imprimera le résultat sur stdout. Si vous souhaitez avoir un comportement équivalent à wget et enregistrer la sortie dans un nom de fichier basé sur l'URL, vous souhaitez également ajouter l'indicateur --remote-name.
andol
le --silent signifie-t-il qu'il n'y a pas de réponse ou de sortie?
davidhyland
1
De plus, appeler le script php à partir de la ligne de commande ne donnera pas nécessairement le même résultat. En plus de la possibilité d'une configuration différente, il y a aussi le scénario non rare où le script est exécuté comme un utilisateur différent de cette façon. Tout dépend de la configuration.
andol
Eh bien, je l'ai fait fonctionner en utilisant "curl --silent domain.com/script.php > / dev / null 2> & 1" mais cela fonctionne aussi très bien avec "curl -o --url domain.com/script.php > / dev / null 2> & 1 "quelle est la différence?
davidhyland
1
La première commande envoie toutes les sorties à / dev / null, la seconde crée un fichier appelé -urldans le répertoire personnel de l'utilisateur exécutant le script, qui contient la sortie de votre fichier php, toutes les autres sorties vont à / dev / null.
user9517
6

Si la boucle est disponible, vous pouvez essayer quelque chose comme

1 1 * * 0  /usr/bin/curl --silent http://example.come/some.php &>/dev/null

Cela devrait faire en sorte que curl soit complètement silencieux afin que vous n'en receviez aucun e-mail à la fin.

user9517
la source
4
Je recommanderais également d'utiliser l'option --show-error, donc elle est silencieuse pour un fonctionnement normal mais générera une erreur si cela se produit.
emerino
6

Je suggère d'ajouter le paramètre "-m" en plus de --silent car ce paramètre définit la durée maximale autorisée pour le transfert. Imaginez que vous appelez le cron toutes les minutes et que le script prenne 2 minutes - cela peut avoir un impact négatif sur la charge du serveur ou d'autres choses.

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
Johnny Vietnam
la source