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

Wyłącz/Wyłącz/Restart serwer'a vt przez panel

Polecane posty

Witam

Zrobiłem sobie panel do vt i wszystko już jest gotowe oprócz włącz/wyłącz/restart serwera ;) kompletnie nie wiem jak się za to zabrać. Proszę o pomoc

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No to zostały Ci najważniejsze rzeczy ;)

system/exec + screen

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja bym wykorzystał moduł PHP ssh2, korzystanie z exec w PHP nie jest zalecane.

Udostępnij ten post


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

Weź sobie utwórz plik ventrilo.sh w której wpiszesz komendę uruchamiania na screenie a później tylko exec i załaduj w php ten plik :P Już masz komendę start.

 

Aby zrobić stop to musisz wpisać komendę która odnajdzie tego screena (nazwa screena to najlepiej port) i go zabije.

 

Restart to robisz stop plus start ;)

 

 

EDIT:

 

zrób tak:

 

 

PLIK START.PHP

 

<?PHP

$start = system("sh katalog/do/serwera/ventrilo/ventrilo.sh");

echo '<BR>';

echo 'Serwer Ventrilo został uruchomiony';

?>

 

 

PLIK STOP.PHP

 

<?PHP

//Port podaj taki jak podany w komendzie startującej screen

$port=port;

 

$stop2 = system("ps ax | grep $port | grep -v grep | awk '{print $1}'");

$stop = system("ps ax | grep $port | grep -v grep | awk '{print $1}' | kill " .$stop2);

 

echo '<BR>';

echo 'Serwer Ventrilo został wyłączony';

?>

 

 

RESTART.PHP

 

<?PHP

$port=port;

$rst2 = system("ps ax | grep $port | grep -v grep | awk '{print $1}'");

$rst = system("ps ax | grep $port | grep -v grep | awk '{print $1}' | kill " .$rst2);

 

$start = system("sh katalog/serwera/ventrilo/ventrilo.sh");

 

echo '<BR>';

echo 'Serwer Ventrilo został zrestartowany';

?>

Edytowano przez Kamikadze (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja bym wykorzystał moduł PHP ssh2, korzystanie z exec w PHP nie jest zalecane.

A czym różni się wykonanie exec bezpośrednio via PHP od exec via moduł SSH?

W większości przypadków (działanie procesów php z uid użytkownika) to niczym.

Udostępnij ten post


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

Oj tam się kłócicie ;)

 

Jeżeli on chce to do zastosowania własnego niekomercyjnego to niech wykorzysta to co mu napisałem i będzie mu ładnie działać :D Jak chce profesjonalnie to zrobić to już wyższa szkoła jazdy :P hehe

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

nie mogę zrobić tego ventrilo.sh ;) ciągle screen odpala się z nazwą "screen" a nie z "1003"

 

ventrilo.sh

#!/bin/bash


screen -A -m -d -S 1003 ./ventrilo_srv
sleep 2
chmod 777 "/home/serwery/ventrilo/1003/ventrilo_srv.pid"

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Włacz:

 

Ustaw sobie zmienne:

$sciezka - ścieżka do katalogu np

$sciezka='/home/vent/';

$r['port'] - wynik z mysql ( w moim przypadku )

$r['host'] - IP ssh

$portssh - port ssh

$userssh - user ssh

$hashssh - haslo ssh

 

 

$polecenie = "cd ".$sciezka."".$r['port']."; screen -A -m -d -S ".$r['port']." ./ventrilo_srv";	
$polaczenie = ssh2_connect($r['host'], $portssh);
ssh2_auth_password($polaczenie, $userssh, $hashssh); 
$stream = ssh2_exec($polaczenie, $polecenie);	

 

 

Wyłącz:

 

 

$polecenie = "killall -9 ".$sciezka."".$r['port']."/ventrilo_srv";	
$polaczenie = ssh2_connect($r['host'], $portssh);
ssh2_auth_password($polaczenie, $userssh, $hashssh); 
$stream = ssh2_exec($polaczenie, $polecenie);

 

 

Reset:

 

$polecenie = "killall -9 ".$sciezka."".$r['port']."/ventrilo_srv; cd ".$sciezka."".$r['port']."; screen -A -m -d -S ".$r['port']." ./ventrilo_srv";	
$polaczenie = ssh2_connect($r['host'], $portssh);
ssh2_auth_password($polaczenie, $userssh, $hashssh); 
$stream = ssh2_exec($polaczenie, $polecenie);	

 

 

Kamikadze:

<?PHP
$port=port;
$rst2 = system("ps ax | grep $port | grep -v grep | awk '{print $1}'");
$rst = system("ps ax | grep $port | grep -v grep | awk '{print $1}' | kill " .$rst2);

$start = system("sh katalog/serwera/ventrilo/ventrilo.sh");

echo '<BR>';
echo 'Serwer Ventrilo został zrestartowany';
?>

 

Nawet jeśli się nie zresetuje serwer to i tak się wyświetli "Serwer Ventrilo został zrestartowany" nie lepiej dać:

if($start) echo "Tak"; 
   else echo "Nie"; 

Edytowano przez Devias (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Devias - zapomniałeś tylko dodać, że autor musi sobie dokompilować moduł php5_ssh2.

Dla mnie jakiekolwiek takie dziwadła sensu większego nie mają.

Nie lepiej opracować sobie odpalany przez crontaba pooler czytający z bazy zadania i je wykonujący?

Udostępnij ten post


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

[qupte]

 

Nawet jeśli się nie zresetuje serwer to i tak się wyświetli "Serwer Ventrilo został zrestartowany" nie lepiej dać:

if($start) echo "Tak"; 
   else echo "Nie"; 

 

Fakt :P Ale jak ktoś potrzebuje to sobie sam to opracuje

 

 

Nie lepiej opracować sobie odpalany przez crontaba pooler czytający z bazy zadania i je wykonujący?

 

Tak tylko trzeba się na tym znać a skoro on nie potrafi zrobić start i stopu serwera to z tym będzie miał jeszcze trudniej ;)

 

 

A ventrilo.sh robisz tak:

 

1. nano ventrilo.sh (oczywiście w katalogu z serwerem)

2. wpisujesz: screen -A -m -d -S 1003 ./ventrilo_srv (i zapisujesz)

3. chmod 777 ventrilo.sh

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Skrypt BASH:

#!/bin/sh

 

server_start() {

if [ -z "$(screen -ls | grep [NAZWA_SCREENA])" ]; then

 

cd [sCIEZKA]

screen -dmS [NAZWA_SCREENA] ./ventrilo_srv

 

else

sleep 0

 

fi

}

 

server_restart() {

if [ "$(screen -ls | grep [NAZWA_SCREENA])" ]; then

 

screen -dr [NAZWA_SCREENA] -X quit

sleep 1

cd [sCIEZKA] && screen -dmS [NAZWA_SCREENA] ./ventrilo_srv

 

else

sleep 0

 

fi

}

 

server_stop() {

if [ "$(screen -ls | grep [NAZWA_SCREENA])" ]; then

 

screen -dr [NAZWA_SCREENA] -X quit

else

sleep 0

 

fi

}

 

case "$1" in

'start')

server_start

;;

'restart')

server_restart

;;

'stop')

server_stop

;;

*)

echo "usage $0 start|restart|stop"

esac

 

Skrypt PHP:

<?php

shell_exec("cd [sCIEZKA] && ./panel.sh [sTART/STOP/RESTART]");

?>

 

 

Jeżeli przerobisz, powinno działać lecz tego nie gwarantuje - pisane w nocy :) W zupełności powinno tobie wystarczyć.

Edytowano przez HyperHost - Support (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
#!/bin/sh

 

server_start() {

if [ -z "$(screen -ls | grep 1003)" ]; then

 

cd /home/serwery/ventrilo/1003

screen -dmS 1003 ./ventrilo_srv

 

else

sleep 0

 

fi

}

 

server_restart() {

if [ "$(screen -ls | grep 1003)" ]; then

 

screen -dr 1003 -X quit

sleep 1

cd /home/serwery/ventrilo/1003 && screen -dmS 1003 ./ventrilo_srv

 

else

sleep 0

 

fi

}

 

server_stop() {

if [ "$(screen -ls | grep 1003)" ]; then

 

screen -dr 1003 -X quit

else

sleep 0

 

fi

}

 

case "$1" in

'start')

server_start

;;

'restart')

server_restart

;;

'stop')

server_stop

;;

*)

echo "usage $0 start|restart|stop"

esac

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dlaczego uważasz że odpala Ci z nazwą screen? Przecież jest wyraźnie 1003. Inaczej przez screena sie nie da. A żeby Ci to udowodnić wpisz screen -x 1003 i zobacz że otworzy wcześniej schowany screen ventrilo.

Edytowano przez HyperHost - Support (zobacz historię edycji)

Udostępnij ten post


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

Używaj HTOP :)

 

Tam masz ładnie wszystkie procesy opisane.

 

W ps -ae masz tylko ogólnie jako screen odpalony bo to jest proces screena (bez nazwy - portu). W HTOP masz normalnie wszystko.

 

 

W ps -ae serwer jest odpalony jako ventrilo_srv

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A ja pozwolę sobie odświeżyć. Jak zrobić by apache wykonując skrypt podobny do tego:

<?php

shell_exec("cd [sCIEZKA] && ./panel.sh [sTART/STOP/RESTART]");

?>

Wykonywał go nie w www-data a na innym użytkowniku? Proszę o odpowiedz. Pozdrawiam.

Szukałem coś o

su user password

Ale nic nie znalazłem jak by ktoś mógł jak to wykonać będzie wdzięczny. Napisałem maly panel do uruchamiania BigBrotherbot i teamspeak3,ale potrzebuję tej zmiany.

  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A nie lepiej libssh2 wykorzystać?

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ć  

×