Skocz do zawartości
Zaloguj się, aby obserwować  
DeoN

Wykonywanie skryptu SH z poziomu php

Polecane posty

Witajcie,

 

Mam mały problem otóż napisałem sobie prosty skrypt w sh wygląda on tak:

#!/bin/bash
cd /home/ts3/bot
./ts3phpbot.sh start

W skrócie przechodzi on do folderu z botem na ts3 który posiada tam kilka pluginów..

Problem jest taki że samo sh działa poprawnie po wywołaniu go w puttym śmiga, jak wejdę w plik php który wygląda tak:

<?php  
$test = system("sh ./testowy.sh");
echo $test;
?>

Zwraca mi komunikat o poprawnym uruchomieniu bota..

starting all instances of ts3phpbot:
 starting config/virtualServer/9988...\tdone\n
 starting config/virtualServer/9989...\tdone\n

Niestety, problem jest taki że nie działa..

chmod jaki nadałem do +x na pliki sh.

 

Jakieś podpowiedzi jak to można zrobić?

 

Pozdrawiam

Piotr 'DeoN'

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Kamikadze

zobacz czy masz tego samego usera dla obu plików.

 

 

chown www-data plik.sh

 

i zobacz :)

 

Edit:

 

Podejrzewam że user www-data także nie może uruchomić serwera ts3.

Pomyśl nad ssh2

Edytowano przez Kamikadze (zobacz historię edycji)
  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

zobacz czy masz tego samego usera dla obu plików.

 

Pomyśl nad ssh2

 

Oba pliki posiadają tego samego użytkownika.

 

Mógłbyś podesłać może jakiś przykład ssh2?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@DeoN: Powiem ci szczerze. Że sam miałem podobny problem. Miałem prosty skrypcik do uruchamiania serwerów TS. przez komendę system() co chwila były problemy. Skupiłem się na ssh2 i śmigało wszystko jak mała motorynka :) W ssh2 podajesz adres IP, login i hasło do konta. Wykonuje Ci polecenia jak u zwykłego usera... Tylko trzeba doinstalować ssh2 po stronie php..

 

Sprawdź czy jak wpiszesz w terminalu:

php plik_php.php czy się uruchomi poprawnie


 

Edytowano przez PrecelusMaximus (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Oba pliki posiadają tego samego użytkownika.

 

Mógłbyś podesłać może jakiś przykład ssh2?

 

Mogą nawet i posiadać jako ownera innego użytkownika. Chodzi o uprawnienia dla pliku oraz do katalogu.

Uruchom skrypt dla celów testowych jako użytkownik na którym wykonwyany jest proces php (www-data, apache lub jak używasz modułu security to jakiś odpowiedni user)

 

su user -c '/sciezka/skrypt.sh'

 

Zobaczysz komunikat o co kaman, ewentualnie strace

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@DeoN: Powiem ci szczerze. Że sam miałem podobny problem. Miałem prosty skrypcik do uruchamiania serwerów TS. przez komendę system() co chwila były problemy. Skupiłem się na ssh2 i śmigało wszystko jak mała motorynka :) W ssh2 podajesz adres IP, login i hasło do konta. Wykonuje Ci polecenia jak u zwykłego usera... Tylko trzeba doinstalować ssh2 po stronie php..

 

Sprawdź czy jak wpiszesz w terminalu:

php plik_php.php czy się uruchomi poprawnie

 

Po wpisaniu php start.php nie śmiga niestety.

 

Starałem się również poprzez link od Wlodzia spróbować ssh2

 

<?php
$connection = ssh2_connect('ip', 22);
ssh2_auth_password($connection, 'pw', 'haslo');


$stream = ssh2_exec($connection, './start.sh');
?>
Nic.
W samym terminalu komenda su user -c '/sciezka/skrypt.sh' po odpowiedniej zmianie działa, bez błędów itp.
Edytowano przez DeoN (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
$stream = ssh2_exec($connection, './start.sh');

a czy ścieżka do pliku jest poprawna?

 

Plik sh znajduje się w tym samym folderze co sh.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czyli rozumiem, że jeśli logujesz się np przez puTTy i po zalogowaniu dasz komendę dir to widzisz ten plik?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czyli rozumiem, że jeśli logujesz się np przez puTTy i po zalogowaniu dasz komendę dir to widzisz ten plik?

Tak, może inaczej teraz tak.

 

Zmieniłem komendę na taką:

 

$stream = ssh2_exec($connection, '/var/www/bot/start.sh');

 

Tak z czystej ciekawości dodałem echo $stream;

 

Łapę taki komunikat Resource id #3

Edytowano przez DeoN (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czyli uchwyt połączenia jest.

A spróbuj wywołać polecenie odpalenia serwer TS3 bez pliku sh, czyli to co masz w sh wywal do polecenia w PHP

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
 czyli to co masz w sh wywal do polecenia w PHP

Jeżeli dobrze zrozumiałem to to:

#!/bin/bash
cd /home/ts3/bot/
./ts3phpbot.sh start

Mam przerobić na coś takiego:

 

/home/ts3/bot/ts3phpbot.sh start

 

Niestety wciąż nie śmiga.

Edytowano przez DeoN (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

cd /home/ts3; ./ts3server_startscript.sh start

Mnie chodziło bardziej o coś takiego:

 

cd /home/ts3/bot; ./ts3phpbot.sh start

z tego co podałeś tak to teoretycznie powinno wyglądać..

 

Dalej ten sam błąd ; <

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Kamikadze

Włącz display errors w pliku. SSH2 masz doinstalowane na serwerze do php?

 

 

edit: daj komendę do ssh2 touch plik.txt i zobacz czy się utworzy :)

Edytowano przez Kamikadze (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Skoro masz stream, to użyj go by pobrać output z serwera..

Programiści, a biadolicie niesamowicie tu.

 

@Kamikadze

Jak Twoim zdaniem otrzymałby strumień bez biblioteki ssh?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ręce i nogi opadają jak czytam niektóre posty.

 

Zacznij sobie od utworzenia skryptu w stylu ts3.sh, który odpala serwer. Upewnij się, że via SSH jesteś w stanie go odpalić, czyli komenda sh ts3.sh działa poprawnie. Jeśli tak robisz to samo w php, jeśli w php nie działa, a w ssh tak to robisz sztuczki.

 

Sztuczka pierwsza:

if [ "$1" != "fallback" ]; then
        # Pierwsze odpalenie
        sh $0 "fallback"
        
        # Exit
        exit 0
fi
# Twój kod

Reszta płatna ;).

Edytowano przez Archi (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ręce i nogi opadają jak czytam niektóre posty.

 

Zacznij sobie od utworzenia skryptu w stylu ts3.sh, który odpala serwer. Upewnij się, że via SSH jesteś w stanie go odpalić, czyli komenda sh ts3.sh działa poprawnie. Jeśli tak robisz to samo w php, jeśli w php nie działa, a w ssh tak to robisz sztuczki.

 

Sztuczka pierwsza:

if [ "$1" != "fallback" ]; then
        # Pierwsze odpalenie
        sh $0 "fallback"
        
        # Exit
        exit 0
fi
# Twój kod

Reszta płatna ;).

Wybacz, ale nic nie zrozumiałem. Jestem początkujący na linuxie, chodzi mi po prostu o to abym mógł sobie bota do ts3 odpalić ze strony.. Żadnego panelu nie robię...

 

Plik php

 

<?php
$connection = ssh2_connect('ip', 22);
ssh2_auth_password($connection, 'login', 'haslo');
 
$stream = ssh2_exec($connection, '/home/ts3/bot/ts3phpbot.sh start');
echo $stream;
?>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Przeczytaj jeszcze raz, jak używa się streamu z tej biblioteki ; )

 

Jakaś mała podpowiedź proszę :) ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

To ja sobie daruję ^^

 

Będę wklepywał ręcznie wszystko ^^

 

Dziękuję za pomoc osobą chętnym ;)

 

Miłego wieczoru życzę.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×