SCREEN - Parancs küldése kívülről

Fórumok

Sziasztok!

A kérdés adott, mint feljebb olvasható.
Már nagyon sok helyen keresgéltem, de nem találtam megoldást.

A probléma az lenne, hogy a suliban (BMF) lenne egy féléves programozási feladatunk. A haverommal azt találtuk ki, hogy egy game szerver vezérlőt csinálunk. A game egy screen-en belül fut, így könnyen le lehet lőni, meg el lehet indítani, hogy a háttérben fusson. Viszont azt is bevállaltuk, hogy parancsokat lehessen küldeni a szervernek. S én anno olyat olvastam, hogy anélkül is lehet a screen-en belűli proginak parancsot küldeni, hogy reattacholni keljen... viszont most ezt sehol sem találom... Tudok ebben segíteni?

Üdv Dani

Hozzászólások

Miért nem hallgat a program vmi magas porton? Akkor tudnál neki pl. netcat-el parancsokat küldeni...

konkrétum:

Tudom most érünk a megkövezés részhez :D
ASP.NET kell megírni és webszolgáltatásnak van álcázva.
A könnyebség kedvéért csak shell scripteket rántunk be, azzal indjuk, leállítjuk, és konfig fájlt írjuk és olvassuk.
Plussz ugye arra gondoltunk, hogy egy screen-el vezérelve parancsot is tudunk küldeni.
pl.: map dm/mohdm2 (mohaa esetén)

most, hogy VPC-re felraktam egy Debian Echt-et, a screen-be az -X kapcsolóval tudtam egy exec parancsot küldeni, de az mint egy shell parancs akart lefutni, s nem a játék szerver konzoljára ír be...
(remélem érthető voltam)

A netcat érdekelne, mert az nc -vvnu xxx.xxx.xxx.xxx port -al tudtam kapcsolódni a mohaa szerverhez UDP-vel, de ha beírok bármit nem történik semmi, annyit viszont látok, hogy hány packet lett kiküldve.

Üdv Dani

Na várj, a szerver most standalone program, vagy asp.net webservice, mert a kettő nem egy és ugyanaz. Kissé zavaros vagy...

A screen-be küldött dolgok általában shell scriptként akarnak lefutni, tehát vagy megoldod a stateless vezérlést, vagy elfelejted az egészet.

.NET-ben meg lehet azt csinálni, hogy kreálsz egy ServerSocket-et, arra listenelsz, accept(), ha az visszatér, nyitsz egy szálat, majd megin kapcsolatra vársz. Az új szálban lekéred a ClientSocket-től (vagy csak simán Socket, ezt így most nem tudom) a StreamReader-t (akármi is a .NET-beli neve), abból kiolvasod a kliens által küldött parancsot, és nagyjából ennyi is a vezérlés.
Ehhez a serverhez vagy netcat vagy telnet segítségével tudsz kapcsolódni, de asszem telnet is yó, mert a .NET automatice keepalive socketet csinál.

Bővebben msdn.microsoft.com és msdn2.microsoft.com

Szerintem a "-X" parancssori kapcsolora emlekszel:

" -X Send the specified command to a running screen session. "
(lsd. meg: "man screen")

Na igen, azt már próbáltam, de nincs hatása...
nem küld vissza hibát, de semmi sem történik, még logba sem kerül bele.

szerk:
illetve most vettem észre valamit:
ha megpróbálom a screent reattacolni ez a hibát kapom:
Cannot open your terminal '/dev/pts/9' - please check.

Üdv Dani

google-vel ilyet talaltam:
screen -S screenneve -X eval 'stuff ls\015'
ls helyere megy a parancs amit vegre akarsz hajtani
\015 az szerintem az enter lesz.

Tyrael