Je souhaite utiliser le script .sh pour le déploiement de mon application. Ce script se trouve sur mon serveur domestique (serveur Ubuntu 15.10), marqué comme exécutable. L'accès à ce script se fait via ssh, en utilisant ce tutoriel, j'ai configuré la connexion ssh, qui exécute ce script. Donc, fondamentalement, je viens d'appeler ssh deployer@XXX.com someArguments
et il exécute mon script avec someArguments
comme paramètres. L'utilisateur deployer
a uid = 0, donc c'est fondamentalement root
(cela sera changé à l'avenir, je l'ai défini uniquement pour éliminer les problèmes d'autorisations jusqu'à ce qu'il fonctionne bien).
Et c'est là que les choses deviennent délicates. Le script rend compte /usr/bin/env: php: No such file or directory
à la commande /bin/composer install
(à l'aide de Composer ). Les choses sont d'autant plus bizarres que je regarde ce script. Avant cette ligne, il est également appelé /bin/composer self-update
et /bin/composer -V
, qui s'exécute correctement et affiche une sortie correcte.
J'ai vérifié les choses suivantes:
/usr/bin/env php -v
affiche la version PHP correcte (identique à/usr/bin/php -v
)whereis php
affichephp: /usr/bin/php /usr/local/bin/php /usr/share/man/man1/php.1.gz
php5-cli
le package est installé et la dernière version$PATH
contient/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
which env
affiche/usr/bin/env
J'ai également essayé les choses suivantes:
- exécuter le script directement
bash deploy.sh
sous root (car il est le même que cet utilisateur) - fonctionne parfaitement sans erreurs - exécution directe de commandes défaillantes - également parfaitement sans erreurs
Donc cela me semble être un cas très spécifique, pourquoi cette commande ne fonctionne pas. J'ai passé 12 heures à le déboguer et je suis à court d'idées ici.
PS: une erreur similaire ( /usr/bin/env: node: No such file or directory
) se produit lorsqu'il y a bower install
(à l'aide de Bower ), mais pas lors de l'exécution npm install
(à l'aide de NPM ).
sh deploy
et les bash deploy
deux donnent les mêmes résultats
/usr/bin/env > environment.txt
sh deploy
place debash deploy
(peut-être un bashisme). Comment avez-vous vérifié les " choses suivantes "? Je recommande de les vérifier dans le script, afin que vous puissiez découvrir d'éventuels remplacements et désinfections d'envs.