Exécuter deux commandes séquentiellement dans un travail 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 courent en même temps.

comment exécuter la première commande et quand elle est terminée, exécuter la seconde commande?

aussi la fonction Afterwy1.php a des requêtes http javascript qui ne sont pas exécutées lorsque j'utilise wget. Ça marche si J'ouvre Afternyfunction1.php dans mon webbrowser.

37
demandé sur Niels Castle 2012-03-09 22:52:23

2 réponses

si la première commande doit être exécutée en premier, vous devez les séparer avec the && operator comme vous le feriez dans le shell. Si le premier échoue, le second ne court pas.

76
répondu vincent 2017-05-23 11:47:12

vous pouvez 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 de cron va d'abord démarrer le mysql par sem , ce qui le mettra dans une sorte de file d'attente appelée MyQueue . Cette file d'attente sera probablement vide, donc 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. Avec --jobs 1 , sem est chargé de exécuter une seule tâche à la fois dans cette file d'attente. Dès que le mysql est terminé, le second sem exécute la commande wget . sem dispose de nombreuses options pour contrôler le comportement de la file d'attente. Par exemple , si vous ajoutez --semaphoretimeout -60 , un travail en attente va simplement mourir après 60 secondes.

la solution && est probablement meilleure, car elle n'exécute pas la seconde commande lorsque la première échoue. La solution sem a l'avantage que vous pouvez spécifier différents cron paramètres, comme un autre utilisateur. Et cela évitera le chevauchement des tâches cron, si l'intervalle cron est plus court que la durée de l'emploi.

3
répondu Onnonymous 2018-04-26 15:54:34