Saya ingin menggunakan skrip .sh untuk penerapan aplikasi saya. Skrip itu ada di server rumah saya (Server Ubuntu 15.10), ditandai sebagai dapat dieksekusi. Akses ke skrip ini dilakukan melalui ssh, menggunakan tutorial ini , saya telah mengatur ssh login, yang menjalankan skrip itu. Jadi pada dasarnya saya hanya memanggil ssh deployer@XXX.com someArguments
dan menjalankan skrip saya dengan someArguments
sebagai parameter. Pengguna deployer
memiliki uid = 0, jadi pada dasarnya root
(ini akan diubah di masa depan, saya telah menetapkannya hanya untuk menghilangkan masalah izin sampai berfungsi dengan baik).
Dan di sinilah semuanya menjadi rumit. Skrip melaporkan /usr/bin/env: php: No such file or directory
pada perintah /bin/composer install
(menggunakan Komposer ). Hal-hal semakin aneh, semakin saya melihat skrip itu. Sebelum baris ini, ada juga yang dipanggil /bin/composer self-update
dan /bin/composer -V
, yang keduanya berjalan dengan benar dan menampilkan output yang benar.
Saya telah memeriksa hal-hal berikut:
/usr/bin/env php -v
menampilkan versi PHP yang benar (sama seperti/usr/bin/php -v
)whereis php
menampilkanphp: /usr/bin/php /usr/local/bin/php /usr/share/man/man1/php.1.gz
php5-cli
paket diinstal dan versi terbaru$PATH
mengandung/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
which env
menampilkan/usr/bin/env
Saya juga sudah mencoba beberapa hal berikut:
- menjalankan skrip secara langsung seperti di
bash deploy.sh
bawah root (karena itu sama dengan pengguna itu) - berfungsi sempurna tanpa kesalahan - menjalankan perintah yang gagal secara langsung - juga sempurna tanpa kesalahan
Jadi ini bagi saya adalah kasus yang sangat spesifik, mengapa perintah ini tidak berfungsi. Saya menghabiskan 12 jam men-debug itu dan saya kehabisan ide di sini.
PS: Kesalahan yang serupa ( /usr/bin/env: node: No such file or directory
) terjadi ketika ada bower install
(menggunakan Bower ), tetapi tidak ketika menjalankan npm install
(menggunakan NPM ).
sh deploy
dan bash deploy
keduanya memberikan hasil yang sama
/usr/bin/env > environment.txt
sh deploy
bukannyabash deploy
(mungkin beberapa bashism). Bagaimana Anda memeriksa " hal-hal berikut "? Saya sarankan untuk memeriksanya dalam skrip, sehingga Anda dapat menemukan akhirnya penggantian dan sanitasi envs.