Quiero iniciar un script bash cuando se presiona un botón en un sitio web. Este es mi primer intento:
<button type="button" onclick="/path/to/name.sh">Click Me!</button>
Pero sin suerte. ¿Alguna sugerencia?
EDITAR: siguiendo los consejos de slhclk y mit:
Tengo un archivo php en / var / www al que apunto mi navegador web. El contenido del archivo es el siguiente:
<?php
exec("/home/aa/scripts/test.sh");
?>
tesh.sh contiene esto:
screen -S server1 -X quit
Si escribo /home/aa/scripts/test.sh
en shell, el script puede ejecutarse. Sin embargo, cuando apunto mi navegador web a http://example.com/screen.php (que tiene el código anterior), veo una página en blanco y el script no se ha ejecutado. Ambos tienen permisos de ejecución. ¿Por qué no funciona?
Respuestas:
Lo que intentas hacer no es posible de esa manera.
Tenga en cuenta que siempre hay dos lados: el lado del cliente y el lado del servidor. ¿Está el script en la computadora del cliente o en el servidor?
Si está en el cliente: usted, como visitante, solo está viendo un sitio web HTML.
onClick
solo podrá iniciar JavaScript (u otros lenguajes de script ), pero no cualquier script de shell arbitrario que resida en su computadora. Los scripts HTML solo se ejecutan en el navegador y solo pueden hacer cosas limitadas. Lo más importante, no pueden interactuar con su computadora.Piénselo: ¿cómo sabría el navegador cómo abrir el archivo? ¿No cree que esto también sería un problema de seguridad, un sitio web simple que desencadena la ejecución de scripts en la computadora de un cliente? ¿Y si hubiera algo así
onClick('rm -rf /home/user')
?Una alternativa sería ejecutar un applet de Java, si desea que el código se ejecute en el cliente, pero esto no es exactamente lo mismo y es algo realmente complicado. No creo que sea necesario explicar esto en detalle.
Si la secuencia de comandos está en el servidor: si desea ejecutar una secuencia de comandos en el lado del servidor y hacer que el usuario active su ejecución, debe utilizar un lenguaje de programación del lado del servidor. Solo HTML no lo hará, porque es más o menos un archivo estático. Si desea interactuar con el servidor, podría usar, por ejemplo, PHP .
Tiene la
exec
función de ejecutar un script de línea de comandos que se almacena en el servidor web. Básicamente, podría escribirexec('/path/to/name.sh');
y ejecutaría el script en el servidor.Sin embargo, simplemente poner esto en
onClick
aquí no es suficiente. Si aún no conoce PHP y la programación web del lado del servidor, es posible que desee leer algunos tutoriales primero y luego regresar con una pregunta más específica.Si tiene un archivo php con el
exec(...)
comando apropiado , asegúrese de que el script tenga permisos de ejecución establecidos no solo para el usuario sino también para el grupo en el que se encuentra el servidor web, así que en el caso más simple777
.En caso de problemas, compruebe el valor de retorno del script con
echo exec(...);
para ver si hay algún error.También puede ejecutar el script desde la línea de comandos y no desde el navegador con
php /path/to/file.php
.fuente
exec
línea escribiendoecho exec(...);
. También tenga en cuenta que el script necesita permisos de ejecución para el grupo en el que se ejecuta su servidor web, no solo para su usuario.php -v
y con el hecho de que tengo phpfilemanager para que las personas puedan editar archivos. ¿Por qué no está usando el intérprete php?php /var/www/trash/run.php
y no solo el nombre del archivo PHP en sí.Necesita algo de inteligencia del lado del servidor para esto. HTML solo no es suficiente, porque es estático. Una forma común sería php. Muchas ofertas alojadas tienen php instalado por defecto.
Puede usar un programa ftp para colocar un archivo de texto en el directorio raíz de su servidor.
El archivo de texto podría llamarse "run.php" con el siguiente contenido:
Digamos que su dominio es "example.com", si visita esta página en su navegador:
http://example.com/run.php
entonces el archivo php se ejecutará en el servidor. Enviará una página HTML al navegador con el encabezado. Y el script se ejecutará en el servidor.
Hay algunas cosas a tener en cuenta y algunas posibles mejoras:
1) todos podrán acceder a esta página, también robots. Puede asegurar la página con htacces.
2) Esta página se activará en caso de una solicitud "GET" normal del navegador. Pero invoca una acción en el servidor, y si esta acción cambia los datos o hace algo importante, sería mejor activar el script solo en una solicitud POST.
3) Puede insertar una declaración de formulario / botón para poder volver a cargar / ejecutar nuevamente la página. Asegúrese de utilizar el método correcto (GET o POST) en el atributo del método de la declaración del formulario HTML.
4) Sería bueno obtener el resultado del script de shell (código rturn y quizás salida de texto) y escribirlo en el navegador. Esto tiene suficientes problemas para una pregunta por separado :)
fuente
Podría ser un problema de permiso.
Cuando lo activó usando webapp , es apache el que ejecuta el script. Si apache no tiene permiso para ejecutar el script, no funcionará.
Solución: verifique el permiso e intente nuevamente .. :)
fuente
Sé que esto es demasiado tarde, pero creo que vale la pena señalar que configurar CGI en un servidor le permitirá ejecutar un script bash del lado del servidor sin usar PHP ni nada por el estilo.
Sé que esto no aborda la pregunta actualizada, pero lo encontré al tratar de resolver las cosas por mí mismo, ¡así que pensé en publicarlo!
fuente
Para ejecutar scripts de shell directamente desde el navegador, debe agregar esta regla a su archivo .htaccess:
Esto le dice al servidor web que trate los archivos .sh como scripts CGI. No olvide cambiar los permisos de archivo .sh a 755.
fuente