Ich möchte das .sh-Skript für die Bereitstellung meiner App verwenden. Dieses Skript befindet sich auf meinem Heimserver (Ubuntu 15.10 Server) und ist als ausführbar markiert. Der Zugriff auf dieses Skript erfolgt über ssh. Mit diesem Tutorial habe ich die ssh-Anmeldung eingerichtet, mit der dieses Skript ausgeführt wird. Im Grunde rufe ich einfach auf ssh deployer@XXX.com someArguments
und es führt mein Skript mit someArguments
als Parameter aus. Der Benutzer deployer
hat uid = 0, also ist es im Grunde root
(dies wird in Zukunft geändert, ich habe es nur eingestellt, um Berechtigungsprobleme zu beseitigen, bis es gut funktioniert).
Und hier wird es schwierig. Das Skript meldet /usr/bin/env: php: No such file or directory
auf Befehl /bin/composer install
(mit Composer ). Die Dinge sind seltsamer, je mehr ich auf dieses Skript schaue. Vor dieser Zeile steht auch /bin/composer self-update
und /bin/composer -V
, das korrekt ausgeführt wird und die korrekte Ausgabe anzeigt.
Ich habe folgende Dinge überprüft:
/usr/bin/env php -v
zeigt die korrekte PHP-Version an (wie/usr/bin/php -v
)whereis php
Anzeigenphp: /usr/bin/php /usr/local/bin/php /usr/share/man/man1/php.1.gz
php5-cli
Paket ist installiert und neueste Version$PATH
enthält/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
which env
Anzeigen/usr/bin/env
Ich habe auch folgende Dinge versucht:
- Das Skript direkt wie
bash deploy.sh
unter root ausführen (da es mit diesem Benutzer identisch ist) - funktioniert einwandfrei ohne Fehler - Fehlerhafte Befehle direkt ausführen - auch perfekt ohne Fehler
Dies scheint mir also ein sehr spezifischer Fall zu sein, warum dieser Befehl nicht funktioniert. Ich habe 12 Stunden mit dem Debuggen verbracht und habe hier keine Ideen mehr.
PS: Ein ähnlicher Fehler ( /usr/bin/env: node: No such file or directory
) tritt auf, wenn bower install
(mit Bower ), aber nicht beim Ausführen npm install
(mit NPM ).
sh deploy
und bash deploy
beide geben die gleichen Ergebnisse
/usr/bin/env > environment.txt
sh deploy
stattbash deploy
(vielleicht etwas Bashismus). Wie haben Sie die " folgenden Dinge " überprüft ? Ich empfehle, sie im Skript zu überprüfen, damit Sie eventuelle Überschreibungen und Bereinigungen von Envs feststellen können.