Chcę uruchomić skrypt bash po naciśnięciu przycisku na stronie internetowej. To moja pierwsza próba:
<button type="button" onclick="/path/to/name.sh">Click Me!</button>
Ale bez powodzenia. Jakieś sugestie?
EDYCJA- Zgodnie ze wskazówkami slhclk i mit:
Mam plik php w / var / www, na który wskazuję moją przeglądarkę. Zawartość pliku jest następująca:
<?php
exec("/home/aa/scripts/test.sh");
?>
tesh.sh zawiera to:
screen -S server1 -X quit
Jeśli piszę /home/aa/scripts/test.sh
w powłoce, skrypt jest w stanie wykonać. Jednak gdy wskazuję przeglądarkę internetową na http://example.com/screen.php (która zawiera powyższy kod), widzę pustą stronę i skrypt nie został wykonany. Oba mają uprawnienia do wykonywania. Dlaczego to nie działa?
Odpowiedzi:
To, co próbujesz zrobić, nie jest możliwe w ten sposób.
Pamiętaj, że zawsze istnieją dwie strony: po stronie klienta i po stronie serwera. Czy skrypt jest na komputerze klienckim lub na serwerze?
Jeśli jest na kliencie: Ty jako gość widzisz tylko witrynę HTML.
onClick
będzie mógł uruchomić JavaScript (lub inne języki skryptowe ), ale nie dowolny skrypt powłoki, który znajduje się na twoim komputerze. Skrypty HTML działają tylko w przeglądarce i mogą wykonywać tylko ograniczone czynności. Co najważniejsze, nie mogą wchodzić w interakcje z komputerem.Pomyśl o tym: skąd przeglądarka wiedziałaby, jak otworzyć plik? Czy nie uważasz, że byłby to również problem z bezpieczeństwem - zwykła strona internetowa uruchamiająca wykonywanie skryptów na komputerze klienta? Co jeśli było coś takiego
onClick('rm -rf /home/user')
?Alternatywą byłoby uruchomienie apletu Java, jeśli chcesz, aby kod był wykonywany na kliencie, ale nie jest to dokładnie to samo i jest to coś naprawdę skomplikowanego. Nie sądzę, że trzeba to szczegółowo wyjaśniać.
Jeśli skrypt znajduje się na serwerze: Jeśli chcesz uruchomić skrypt po stronie serwera i pozwolić, aby użytkownik uruchomił jego wykonanie, musisz użyć języka programowania po stronie serwera. Po prostu HTML tego nie zrobi, ponieważ jest to mniej więcej plik statyczny. Jeśli chcesz wchodzić w interakcje z serwerem, możesz na przykład użyć PHP .
Ma
exec
funkcję uruchamiania skryptu wiersza poleceń, który jest przechowywany na serwerze WWW. Zasadniczo można pisaćexec('/path/to/name.sh');
i uruchamiać skrypt na serwerze.Jednak samo włożenie tego w
onClick
to nie wystarczy. Jeśli nie wiesz jeszcze o PHP i programowaniu WWW po stronie serwera, możesz najpierw przeczytać kilka samouczków, a następnie wrócić z bardziej szczegółowym pytaniem.Jeśli masz plik php z odpowiednią
exec(...)
komendą, upewnij się, że skrypt ma uprawnienia do wykonywania ustawione nie tylko dla użytkownika, ale także dla grupy, w której znajduje się serwer WWW, więc w najprostszym przypadku777
.W przypadku problemów sprawdź wartość zwracaną skryptu,
echo exec(...);
aby sprawdzić, czy są jakieś błędy.Możesz także uruchomić skrypt z wiersza poleceń, a nie z przeglądarki za pomocą
php /path/to/file.php
.źródło
exec
wiersza, piszącecho exec(...);
. Pamiętaj też, że skrypt wymaga uprawnień do wykonywania dla grupy, na której działa serwer, nie tylko dla użytkownika.php -v
i fakt, że mam phpfilemanager dla ludzi do edycji plików. Dlaczego nie używa interpretera php?php /var/www/trash/run.php
a nie samą nazwę pliku PHP.Potrzebujesz do tego inteligencji po stronie serwera. Sam HTML nie wystarczy, ponieważ jest statyczny. Jednym z powszechnych sposobów jest php. Wiele hostowanych ofert ma domyślnie zainstalowane php.
Możesz użyć programu ftp, aby umieścić plik tekstowy w katalogu głównym serwera.
Plik tekstowy może mieć nazwę „run.php” o następującej treści:
Załóżmy, że twoja domena to „example.com”, jeśli odwiedzasz tę stronę w przeglądarce:
http://example.com/run.php
wtedy plik php zostanie wykonany na serwerze. Wyśle stronę HTML do przeglądarki z nagłówkiem. A skrypt zostanie wykonany na serwerze.
Należy pamiętać o kilku rzeczach i możliwych ulepszeniach:
1) wszyscy będą mogli wejść na tę stronę, także roboty. Możesz zabezpieczyć stronę za pomocą htacces.
2) Ta strona zostanie uruchomiona w przypadku normalnego żądania „GET” z przeglądarki. Ale inwoluje akcję na serwerze i jeśli ta akcja zmienia dane lub robi coś ważnego, lepiej byłoby uruchomić skrypt tylko na żądanie POST.
3) Możesz wstawić instrukcję formularza / przycisku, aby móc ponownie załadować / wykonać stronę ponownie. Pamiętaj, aby użyć właściwej metody (GET lub POST) w atrybucie metody instrukcji formularza HTML.
4) Dobrze byłoby uzyskać wynik skryptu powłoki (kod powrotu i być może tekst) i zapisać go w przeglądarce. Ma to wystarczająco dużo problemów do osobnego pytania:)
źródło
Może to być problem z pozwoleniem.
Kiedy wyzwalane go za pomocą webapp , to Apache , który uruchamia skrypt. Jeśli apache nie ma uprawnień do uruchomienia skryptu, nie będzie działać.
Rozwiązanie: sprawdź uprawnienia i spróbuj ponownie .. :)
źródło
Wiem, że jest już późno, ale myślę, że warto zauważyć, że konfiguracja CGI na serwerze pozwoli ci uruchomić skrypt bash po stronie serwera bez użycia PHP lub czegokolwiek innego.
Wiem, że to nie dotyczy zaktualizowanego pytania, ale znalazłem to, próbując samemu coś wymyślić, więc pomyślałem, że opublikuję to!
źródło
Aby uruchomić skrypty powłoki bezpośrednio z przeglądarki, należy dodać tę regułę do pliku .htaccess:
Mówi to serwerowi internetowemu, aby traktował pliki .sh jako skrypty CGI. Nie zapomnij zmienić uprawnień do plików .sh na 755.
źródło