53 votes

Exécuter deux commandes séquentiellement dans une tâche cron ?

J'ai deux commandes dans un travail cron comme celui-ci :

mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1";wget -N http://mywebsite.net/path/AfterMyFunction1.php

mais il me semble que les deux fonctionnent en même temps.

Comment puis-je faire en sorte que la première commande soit exécutée et que, lorsqu'elle est terminée, la deuxième commande soit exécutée ?

De plus, le fichier AfterMyFunction1.php contient des requêtes http en javascript qui ne sont pas exécutées lorsque j'utilise wget. Cela fonctionne si j'ouvre AfterMyFunction1.php dans mon navigateur web.

100voto

vincent Points 407

Si la première commande doit être complétée en premier, vous devez les séparer avec l'opérateur && comme vous le feriez dans le shell. Si la première commande échoue, la seconde ne fonctionnera pas.

8voto

Onnonymous Points 1112

Vous pourriez utiliser sem qui fait partie de GNU parallel .

0 0 * * * root  sem --jobs 1 --id MyQueue mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1"
1 0 * * * root  sem --jobs 1 --id MyQueue wget -N http://mywebsite.net/path/AfterMyFunction1.php

Cette configuration cron va d'abord lancer le mysql par le biais de sem qui le placera dans une sorte de file d'attente appelée MyQueue . Cette file d'attente sera probablement vide, de sorte que le mysql est exécuté immédiatement. Une minute plus tard, le cron lancera un autre sem qui mettra le wget dans la même file d'attente. Avec --jobs 1 , sem a pour instruction d'exécuter un seul travail à la fois dans cette file d'attente particulière. Dès que le mysql est terminé, le deuxième sem exécutera le wget commandement. sem dispose de nombreuses options pour contrôler le comportement des files d'attente. Par exemple, si vous ajoutez --semaphoretimeout -60 un travail en attente mourra simplement après 60 secondes.

El && est probablement meilleure, puisqu'elle n'exécutera pas la deuxième commande si la première échoue. Le site sem a l'avantage de vous permettre de spécifier des paramètres de cron différents, comme un utilisateur différent. Et elle empêchera le chevauchement des tâches cron, si l'intervalle cron est plus court que la durée de la tâche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X