Przycisk na stronie uruchamiający plik .sh

Dobry mam takie pytanie chciałbym utworzyć na stronie przycisk który uruchamia plik .sh na serwerze VPS.
Czyli np na mojej stronie posiadam przycisk “Kliknij mnie” i uruchamia aplikacje np ROBOT dodałem taki skrypt ale coś nie działa.

<?php
if ($_GET['run']) {
  exec("/home/robot/starter.sh start");
}
?>
<a href="?run=true">Click Me!</a>

spróbowałem też na serwerze stworzyć plik start.sh umiesciłem go w folderze robota, dodałem do niego

#!/bin/bash
php Core.php -i 1

a na stronie zmieniłem na

<?php
if ($_GET['run']) {
  exec("/home/robot/start.sh");
}
?>
<a href="?run=true">Click Me!</a>

i nadal nic :roll_eyes:

Spróbuj:

echo 'www-data ALL=NOPASSWD: ALL' >> /etc/sudoers

W jaki sposób ma to pomóc z problemem? Problem to raczej próbowanie odpalenia skryptu, który musi ciągle potem pracować za pomocą funkcji exec z php, co nie ma najmniejszego sensu pod bardzo wieloma względami i zwyczajnie nie ma prawa działać.

Hmm no ale przecież np TS3AudioBoty jakoś uruchamia sie w screenie i można je włączać przez strone

Z czego wiem splamy używa API TS3AudioBot a nie exec jak i większość paneli

Tu nie chodzi akurat o jego panel.
Powiem tak stworzyłem w /var/www/html plik ./start.sh utworzyłem na głównej stronie plik index.php.
Do pliku index.php dodałem oto te linijki podobno to ma działać a jednak nie wykonuje to skryptu

<?php
if ($_GET['run']) {
  exec("/var/www/html/start.sh");
}
?>

<a href="?run=true">Start</a>

No i skrypt się nie wykonuje się :roll_eyes:

Edit1. Na serwerze plik ./start.sh normalnie się wykonuję
Edit2. Dodam że wykonując php /var/www/html/start.php też skrypt się wykonuje tylko przez stronę to nie działa
Edit3. Dodałem nawet plik .htaacces a w nim a także nadałem uprawnienia 775

Options +ExecCGI
AddHandler cgi-script .sh

A sprawdź czy czasem execa wyłączonego w PHP nie masz

Dobra jest to wyłączone teraz jak to włączyć?

w katalogu /etc/php/7.4/fpm i pliku php.ini wydaje się być to włączone

Server version: Apache/2.4.38 (Debian)
Server built: 2020-08-25T20:08:29
PHP 7.4.10 (cli) (built: Sep 9 2020 06:54:34) ( NTS )
Copyright © The PHP Group
Zend Engine v3.4.0, Copyright © Zend Technologies
with Zend OPcache v7.4.10, Copyright ©, by Zend Technologies

Edit1. Dobra udało się go włączyć i działa jak widać wiec dlaczego nie działa skrypt włączający robota?

Edit2. Hmm okazało się ze po dodaniu pliku .htaacces i tego wszystkiego wystarczyło zrobić reboot maszyny…

No nic dzięki za pomoc :heart:

Ekhem jednak potrzebuje pomocy ponieważ skrypt który wcześniej opisałem działa bez problemu ale teraz chciałbym dodać go do panelu i ło tego nie za bardzo wiem jak to zrobić.
Kod HTML

Kawałek HTML w którym chciałbym włączać ten skrypt

<button class="btn btn-dark"><i class="fa fa-power-off power-on"></i> Włącz aplikację Robot</button>

Mój skrypt php

 <?php
 if ($_GET['run']) {
 exec("/var/www/html/stop.sh");
 }
 ?>
 
 <a href="?run=true">Stop</a>

Uzyj fetch / axios

Parda? Mozesz mi to objaśnić albo napisac co i jak bo jeszcze az tak oblatany nie jestem w php

To jest JS :wink:

Dobra trochę ułatwiłeś sprawę bo wiem co to ale nadal nie wiem jak to stworzyć.

1 polubienie

Pomysł jak to działać ma i wpisz w google axios lub fetch i na buttonach daj onclick

W tym panelu akurat znalazłem coś takiego tylko nie koniecznie wiem jak to przerobić :smiley:.
Bo tu pisze startApp a w HTML żeby wykonał się ten skrypt jest dodane

I troche ryje mi to banie dlaczego tu jest startStopAPP i jeszcze app-start w button, dodam że jeśli usunie się w button app-start to aplikacja nie wystartuje.

public function startApp() {
      if($this->type == 'localhost') {
        if(!$this->check['status']) { return $this->error(); }
        $config = $this->config;

        if(preg_replace('/\D/', '', shell_exec("sudo screen -S TS3AudioBot -Q select . ; echo $?")) == 0) {
          return $this->response(false,'Error: app is enabled');
        }

        shell_exec("cd {$config['path']} && sudo screen -dmS TS3AudioBot dotnet TS3AudioBot.dll");

        return $this->response(true,true);
      } elseif($this->type == 'externalhost') {
        return $this->request('startApp');
      }
      return $this->response(false,'Error: bad api method');
    }

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.