2011-06-04 09:01:23 +0000 2011-06-04 09:01:23 +0000
12
12

Запустите скрипт оболочки с кнопкой html.

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

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

Но безуспешно. Есть предложения?

EDIT- Следуя советам slhclk’s и mit:

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

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

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

screen -S server1 -X quit

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

Ответы (5)

11
11
11
2011-06-04 09:37:02 +0000

То, что ты пытаешься сделать, невозможно.

Обратите внимание, что всегда есть две стороны: Клиентская и серверная стороны. Сценарий находится на клиентском компьютере или на сервере?


Если он на клиенте: Вы, как посетитель, видите только 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
4
4
2011-06-04 09:50:25 +0000

Для этого тебе нужна информация с серверной стороны. Одного 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) Хорошо было бы получить результат скрипта оболочки (rturn code и, возможно, текстовый вывод) и записать его в браузер. Этого достаточно для отдельного вопроса : ).

3
3
3
2012-01-06 06:21:27 +0000

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

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

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

1
1
1
2018-08-11 08:36:42 +0000

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

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

0
0
0
2018-11-09 17:43:32 +0000

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

Options +ExecCGI
AddHandler cgi-script .sh

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

Похожие вопросы

6
10
11
7
37