Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ssh2 i problem z komendą screen
Forum PHP.pl > Forum > PHP
kubek15
Witam

Robie sobie panel kontrolny serwera i komendy wysyła taką funkcją

  1. if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
  2. // log in at server1.example.com on port 22
  3. if(!($con = ssh2_connect($server, 33222))){
  4. echo "fail: unable to establish connection\n";
  5. } else {
  6. // try to authenticate with username root, password secretpassword
  7. if(!ssh2_auth_password($con, "root", $password)) {
  8. echo "fail: unable to authenticate\n";
  9. } else {
  10. // allright, we're in!
  11. echo "serwer zapisany i wylaczony \n";
  12. //$stream = ssh2_exec($con, "screen -r mine" , 'vt102');
  13. //$stream = ssh2_exec($con, "stop" , 'vt102');
  14. // execute a command
  15. if (!($stream = ssh2_exec($con, $komenda))) {
  16. echo "fail: unable to execute command\n";
  17. } else {
  18. // collect returning data from command
  19. stream_set_blocking($stream, true);
  20. $data = "";
  21. while ($buf = fread($stream,4096)) {
  22. $data .= $buf;
  23. }
  24.  
  25. fclose($stream);
  26. }
  27.  
  28. }
  29. }


I niby wszystko działa bo jak wpisuje:
  1. $komenda = "cd serwer ; ls -l";

to wypisuje mi foldery , pliki też mi otwiera i jak uruchamiam coś w tle komendą screen to też się uruchamia.

Problem pojawia się wteyd gdy np. chce wejsc do teo screna co odpaliłem np. gdy wyłączam serwer.

wpisywałem
  1. $komenda= "screen -r serwer_moj; stop";
  2. //lub
  3. $komenda= "screen -r serwer_moj && stop";


i nie działa , pisze że "Must be connected to a terminal.", a przeciez się polączyłem bo inne komendy działają.

Co może być źle ?
camikazee
Zrób to samo jako użytkownik na serwerze i powiedz co zwróciło.
kubek15
Chodzi ci o to zebym wpisał te same komendy przez terminal ?

To robie tak ze odpalam Putty
Loguje się
wpisuje: cd serwer
wpisuje: screen -A -m -d -S serw -jar plik+serwera.jar nogui
potem: screen -r serw
przenosi mnie na ten screen i tam wpisuje : stop i się zatrzymuje serwer i przenosi mnie do okna komend

A przez php tak jak pisałęm wyżej jak wpisze screen -r serw to wypisuje: Must be connected to a terminal. , a inne komendy wszystko ładnie wykonuje .

Jakieś pomysły?
camikazee
A nie możesz po prostu skillować procesu screena?
Jeszcze można spróbować rozdzielić ssh2_exec na dwie komendy, jedną "screen -r serwer_moj" a drugą "stop" lub napisać prosty skrypt bashowy.
kubek15
Moge skillować , ale nie jestem pewien czy to takie dobre rozwiązanie i czy serwer się wtedy zapisuje.

I musiał bym wyciągać pid bo po nazwie mi nie killuje .

Spróbuje rozdzielić tak jak piszesz, może to cos pomoże
camikazee
Jeżeli zapisuje coś przy stopowaniu, to nie można killować. Jeszcze widziałem, że ktoś robi w ten sposób

  1. $stream = ssh2_shell($con, 'vt102', null, 80, 24, SSH2_TERM_UNIT_CHARS);
  2. fwrite( $stream, 'screen -r game status'.PHP_EOL);
  3. sleep(1);
  4. while($line = fgets($stream)) {
  5. echo $line."<br />";
  6. }

Wiadomo dane wpisz swoje i sprawdź, a nóż.
kubek15
Dziękuje bardzo. Ten ostatni kod działa, rozbiłem tak jak nazałeś na dwie linijki w pierwszej daje screen , a w drugiej stop i śmiga.

Dzięki smile.gifsmile.gifsmile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.