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 someArguments
i uruchamia mój skrypt someArguments
jako parametry. Użytkownik deployer
ma identyfikator UID = 0, więc w zasadzie jest root
to (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 directory
przy 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-update
i /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 -v
wyświetla poprawną wersję PHP (taką samą jak/usr/bin/php -v
)whereis php
wyświetlaphp: /usr/bin/php /usr/local/bin/php /usr/share/man/man1/php.1.gz
php5-cli
pakiet jest zainstalowany i najnowsza wersja$PATH
zawiera/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
which env
wyświetla/usr/bin/env
Próbowałem także następujących rzeczy:
- uruchomienie skryptu bezpośrednio jako
bash deploy.sh
root (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 deploy
i bash deploy
oba dają takie same wyniki
/usr/bin/env > environment.txt
sh deploy
zamiastbash 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.