11

Я хочу запустить скрипт bash при нажатии кнопки на веб-сайте. Это моя первая попытка:

<button type="button" onclick="/path/to/name.sh">Click Me!</button>

Но не повезло. Какие-либо предложения?

Edit- После slhclk годов и советы Массачусетского технологического:

У меня есть файл php в /var /www, на который я указываю свой веб-браузер. Содержимое файла выглядит следующим образом:

<?php
exec("/home/aa/scripts/test.sh");
?>

tesh.sh содержит это:

screen -S server1 -X quit

Если я /home/aa/scripts/test.sh в оболочке, скрипт сможет выполнить. Однако, когда я указываю своему веб-браузеру на http://example.com/screen.php (с кодом выше), я вижу пустую страницу, и скрипт не выполняется. Оба имеют разрешения на выполнение. Почему это не работает?

5 ответов5

11

То, что вы пытаетесь сделать, таким образом невозможно.

Обратите внимание, что всегда есть две стороны: сторона клиента и сторона сервера. Это скрипт на клиентском компьютере или на сервере?


Если это на клиенте: Вы, как посетитель, видите только веб-сайт HTML. onClick сможет запускать только JavaScript (или другие языки сценариев), но не любой произвольный сценарий оболочки, который находится на вашем компьютере. HTML-скрипты запускаются только в браузере и могут выполнять только ограниченные действия. Самое главное, они не могут взаимодействовать с вашим компьютером.

Подумайте об этом: как браузер узнает, как открыть файл? Не думаете ли вы, что это также будет проблемой безопасности - простой веб-сайт, запускающий выполнение сценариев на компьютере клиента? Что, если было что-то вроде onClick('rm -rf /home/user')?

Альтернативой может быть запуск Java-апплета, если вы хотите, чтобы код выполнялся на клиенте, но это не совсем то же самое, и это что-то действительно сложное. Я не думаю, что это необходимо объяснять подробно.


Если скрипт находится на сервере: если вы хотите запустить скрипт на стороне сервера и заставить пользователя запустить его выполнение, то вам нужно использовать язык программирования на стороне сервера. Просто HTML этого не сделает, потому что это более или менее статический файл. Если вы хотите взаимодействовать с сервером, вы можете, например, использовать PHP.

Он имеет функцию exec для запуска сценария командной строки, который хранится на веб-сервере. В общем , вы можете написать exec('/path/to/name.sh'); и он будет запускать скрипт на сервере.

Однако просто поместить это в onClick здесь недостаточно. Если вы еще не знаете о PHP и веб-программировании на стороне сервера, вы можете сначала прочитать несколько руководств, а затем вернуться к более конкретному вопросу.


Если у вас есть php-файл с соответствующей командой exec(...) , убедитесь, что сценарий имеет разрешения на выполнение, установленные не только для пользователя, но и для группы, в которой находится веб-сервер, поэтому в простейшем случае просто 777 .

В случае возникновения проблем проверьте возвращаемое значение скрипта с помощью echo exec(...); чтобы увидеть, есть ли какие-либо ошибки.

Вы также можете запустить скрипт из командной строки, а не из браузера с помощью php /path/to/file.php .

4

Для этого вам нужен некоторый интеллект на стороне сервера. Одного HTML недостаточно, потому что он статический. Одним из распространенных способов будет php. Во многих размещенных предложениях php установлен по умолчанию.

Вы можете использовать программу ftp, чтобы поместить текстовый файл в корневой каталог вашего сервера.

Текстовый файл может быть назван «run.php» со следующим содержанием:

<h3>Executing /path/to/name.sh</h3>
<?
exec('/path/to/name.sh');
?>

Допустим, ваш домен - "example.com", если вы посещаете эту страницу в своем браузере:

http://example.com/run.php

тогда файл php будет выполнен на сервере. Он отправит HTML-страницу в браузер с заголовком. И скрипт будет выполнен на сервере.

Есть некоторые вещи, которые нужно иметь в виду, и некоторые возможные улучшения:

1) все смогут посетить эту страницу, а также роботы. Вы можете защитить страницу с помощью htacces.

2) Эта страница откроется в случае обычного запроса "GET" из браузера. Но это вызывает действие на сервере, и если это действие изменяет данные или выполняет что-то важное, было бы лучше запустить сценарий только по запросу POST.

3) Вы можете вставить оператор формы / кнопки, чтобы иметь возможность перезагрузить / снова выполнить страницу. Обязательно используйте правильный метод (GET или POST) в атрибуте метода оператора формы HTML.

4) Было бы хорошо получить результат сценария оболочки (код возврата и, возможно, вывод текста) и записать его в браузер. Этого достаточно для отдельного вопроса:)

3

Это может быть проблема с разрешением.

Когда вы запускаете его с помощью веб-приложения, скрипт запускает apache . Если у apache нет разрешения на запуск скрипта, он не будет работать.

Решение: проверьте разрешение и попробуйте еще раз .. :)

1

Я знаю, что это слишком поздно, но я думаю, что стоит отметить, что настройка CGI на сервере позволит вам запускать серверный сценарий bash без использования PHP или чего-либо подобного.

Я знаю, что это не относится к обновленному вопросу, но я нашел это, когда пытался сам разобраться, поэтому решил, что я опубликую его!

0

Чтобы запускать сценарии оболочки прямо из браузера, вы должны добавить это правило в ваш файл .htaccess:

Options +ExecCGI
AddHandler cgi-script .sh

Это говорит веб-серверу обрабатывать файлы .sh как CGI-скрипты. Не забудьте изменить права доступа к файлу .sh на 755.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .