Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ssh2 i problem z komendą screen
kubek15
post 29.03.2012, 17:50:56
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

Ostrzeżenie: (0%)
-----


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 ?


--------------------
Go to the top of the page
+Quote Post
camikazee
post 30.03.2012, 08:15:22
Post #2





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Zrób to samo jako użytkownik na serwerze i powiedz co zwróciło.


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
kubek15
post 30.03.2012, 09:15:51
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
camikazee
post 30.03.2012, 09:30:15
Post #4





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował camikazee 30.03.2012, 09:35:54


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
kubek15
post 30.03.2012, 09:41:30
Post #5





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
camikazee
post 30.03.2012, 09:44:49
Post #6





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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óż.


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
kubek15
post 30.03.2012, 11:10:21
Post #7





Grupa: Zarejestrowani
Postów: 278
Pomógł: 3
Dołączył: 28.06.2008
Skąd: PL

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 21:58