Chcę użyć skryptu .sh do wdrożenia mojej aplikacji. Ten skrypt znajduje się na moim serwerze domowym (Ubuntu 15.10 Server), oznaczony jako wykonywalny. Dostęp do tego skryptu odbywa się za pośrednictwem ssh, korzystając z tego samouczka, skonfigurowałem logowanie ssh, które uruchamia ten skrypt. Zasadniczo po prostu wywołuję ssh deployer@XXX.com someArgumentsi uruchamia mój skrypt someArgumentsjako parametry. Użytkownik deployerma identyfikator UID = 0, więc w zasadzie jest rootto (zostanie to zmienione w przyszłości, ustawiłem go tylko w celu wyeliminowania problemów z uprawnieniami, dopóki nie będzie działać poprawnie).
I tutaj sprawy stają się trudne. Skrypt raportuje /usr/bin/env: php: No such file or directoryprzy komendzie /bin/composer install(przy użyciu Composer ). Sprawy są dziwniejsze, im bardziej patrzę na ten skrypt. Przed tym wierszem jest także wywoływane /bin/composer self-updatei /bin/composer -V, które działa poprawnie i wyświetla prawidłowe dane wyjściowe.
Sprawdziłem następujące rzeczy:
/usr/bin/env php -vwyświetla poprawną wersję PHP (taką samą jak/usr/bin/php -v)whereis phpwyświetlaphp: /usr/bin/php /usr/local/bin/php /usr/share/man/man1/php.1.gzphp5-clipakiet jest zainstalowany i najnowsza wersja$PATHzawiera/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gameswhich envwyświetla/usr/bin/env
Próbowałem także następujących rzeczy:
- uruchomienie skryptu bezpośrednio jako
bash deploy.shroot (ponieważ jest taki sam jak ten użytkownik) - działa idealnie bez błędów - bezpośrednie uruchamianie błędnych poleceń - również idealnie bez błędów
Wydaje mi się więc, że to bardzo szczególny przypadek, dlaczego to polecenie nie działa. Spędziłem 12 godzin na debugowaniu i nie mam tutaj pomysłów.
PS: Podobny błąd ( /usr/bin/env: node: No such file or directory) występuje, gdy jest bower install(za pomocą Bower ), ale nie występuje podczas działania npm install(za pomocą NPM ).
sh deployi bash deployoba dają takie same wyniki
/usr/bin/env > environment.txt

sh deployzamiastbash deploy(może jakiś bashism). Jak sprawdziłeś „ następujące rzeczy ”? Polecam sprawdzić je w skrypcie, abyś mógł odkryć ewentualne zastąpienia i sanityzacje środowisk.