2017-05-24 6 views
1

J'ai un script bash qui vérifie si certains fichiers existent et les copie à d'autres endroits. Si les fichiers ne sont pas là alors il se termine avec le code d'état 4.Crontab: exécuter deux commandes seulement si la première commande était correcte

Si le code d'état est 0 alors deux scripts php doivent fonctionner et fonctionner avec les fichiers copiés. Mais je ne sais pas comment dire que la troisième commande (deuxième script php) doit fonctionner que si la première commande était 0.

Le script qui copie les fichiers:

/var/www/dms-live/import-xknddb.sh >> /var/log/importer/import-cron.log 

Le premier script php:

php -f "xknddb-import.php" live k000 >> /var/log/importer/live.xknddb.log 

Le second script php:

php -f "xknddb-import.php" test k000 >> /var/log/importer/test.xknddb.log 

Les deux scripts PHP peuvent fonctionner en même temps, donc je TRIE d celui-ci:

/var/www/dms-live/import-xknddb.sh >> /var/log/importer/import-cron.log && php -f "xknddb-import.php" live k000 >> /var/log/importer/live.xknddb.log & php -f "xknddb-import.php" testAll k000 >> /var/log/importer/test.xknddb.log & 

Le premier script PHP ne s'exécute pas si la première commande échoue. Mais le deuxième script php commence toujours à fonctionner.

Est-il possible de regrouper les deux scripts PHP ou quelque chose?

Répondre

2

Juste groupe les deux scripts php ensemble avec une parenthèse (), ou entre parenthèses {} si vous ne voulez pas ouvrir un sous-shell:

$ false && (echo "Hello" & echo "World") 


$ true && (echo "Hello" & echo "World") 
Hello 
World 

Dans votre cas:

/var/www/dms-live/import-xknddb.sh >> /var/log/importer/import-cron.log && (php -f "xknddb-import.php" live k000 >> /var/log/importer/live.xknddb.log & php -f "xknddb-import.php" testAll k000 >> /var/log/importer/test.xknddb.log &) 
+0

Vous devez utiliser les blocs de code '{}' au lieu de parens donc vous n'ouvrez pas inutilement un sous-shell. – 123