[Ubuntu gameserver] command doorsturen naar screen sessie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
Ik heb sinds een tijdje een Cod4 server draaien en daarbij een website met leuke statistiekjes.
Het leek me wel een gaaf idee om de nummer 1 speler uit de server top 100 ingame te laten zien. Nu is het niet heel moeilijk om ingame een bericht te sturen namens de console. Gewoon in de screen sessie inloggen en dan "say hoi" intypen.

nu is mijn tekstje dynamisch. Dus wanneer ik "php n1" aanroep haalt ie netjes de nummer 1 uit de database en print ie "First in the top 100 is: xxxx with xxxx kills". Dit kan alleen niet uitgevoerd worden wanneer ik in de screen sessie ga. Dan kan ik alleen maar de cod4 server commando's geven.

Nu is mijn vraag dus: Hoe krijg ik de output van mijn script naar de screen sessie?

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
Nou weet ik niet wat je bedoelt met een 'screen sessie', maar ervan uitgaande dat dat gewoon de console met bash als shell is:
say `php n1`

(let op het type quote: een 'backtick').
Netter is het door een pipe of stdin, maar dan moet 'say' dit wel snappen. Ik weet verder helemaal niet wat 'say' is of doet of waar het onderdeel van uitmaakt. Misschien kan je daar wat meer uitleg over geven? (geef bijvoorbeeld eens een relevant stukje uit de manpage)

[ Voor 21% gewijzigd door gertvdijk op 21-01-2009 00:45 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
gertvdijk schreef op woensdag 21 januari 2009 @ 00:43:
Nou weet ik niet wat je bedoelt met een 'screen sessie', maar ervan uitgaande dat dat gewoon de console met bash als shell is:
say `php n1`

(let op het type quote: een 'backtick').
Netter is het door een pipe of stdin, maar dan moet 'say' dit wel snappen. Ik weet verder helemaal niet wat 'say' is of doet of waar het onderdeel van uitmaakt. Misschien kan je daar wat meer uitleg over geven? (geef bijvoorbeeld eens een relevant stukje uit de manpage)
Ik ben nog niet 100% thuis in linux terminologie maar ik zal mn best doen :)

Wanneer ik de cod4 server opstart kan ik direct commando's naar de server sturen. Bijvoorbeeld de map veranderen of messages sturen die elke speler op de server te zien krijgt. Het laatste gaat via het say command.
Deze werkt dus alleen maar wanneer ik de cod4 server gestart heb en deze in mijn ssh scherm zie.

De server sluit af zodra ik mijn ssh connectie afbreek. Dat wil ik niet hebben dus laat ik hem opstarten in een screen sessie. De screen sessie blijft gewoon doorgaan ook al sluit de ssh connectie.
(screen man page: http://www.mediacollege.c...man/page.cgi?topic=screen)

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
aartrost schreef op woensdag 21 januari 2009 @ 00:55:
Ik ben nog niet 100% thuis in linux terminologie maar ik zal mn best doen :)
[...]
Dat wil ik niet hebben dus laat ik hem opstarten in een screen sessie. De screen sessie blijft gewoon doorgaan ook al sluit de ssh connectie.
(screen man page: http://www.mediacollege.c...man/page.cgi?topic=screen)
Ah. Juist doordat ik al in de veronderstelling was dat je de terminologie nog niet helemaal beheerst dacht ik dat je het niet over 'screen' had. :D Goede oplossing idd om dat in screen te doen! :) Ik maak continu en overal gebruik van screen. Remote retachen O+

Anyway... Waarin geef je dat say-commando nu? In het cod programma of op de shell (in een screen)?

[ Voor 8% gewijzigd door gertvdijk op 21-01-2009 01:00 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
gertvdijk schreef op woensdag 21 januari 2009 @ 00:58:
[...]

Ah. Juist doordat ik al in de veronderstelling was dat je de terminologie nog niet helemaal beheerst dacht ik dat je het niet over 'screen' had. :D Goede oplossing idd om dat in screen te doen! :)

Anyway... Waarin geef je dat say-commando nu? In het cod programma of op de shell (in een screen)?
Het cod programma volgens mij. Ik doe gewoon screen -r en dan kom ik in de cod server "omgeving".
Daarin kan ik volgens mij geen normale code uitvoeren. Alleen maar dingen die de cod server begrijpt.

hier zoals dat er zo'n beetje uitziet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
asdClient 1 connecting with 50 challenge ping from 80.101.187.186:-4508
Going from CS_FREE to CS_CONNECTED for  (num 0 guid "59cfd2cdc3bc40006d281655c1db039b")
Received packet 0 of stats data
Received packet 1 of stats data
Received packet 2 of stats data
Received packet 3 of stats data
Received packet 4 of stats data
Received packet 5 of stats data
Received packet 6 of stats data
PunkBuster Server: Running PB Scheduled Task (slot #6) say ^1Do not kick players without reason. It results in an ban for you."
PunkBuster Server: New Connection (slot #1) 80.101.187.186:61028 [59cfd2cdc3bc40006d281655c1db039b] "adkebab" (seq 13604494)
say bla
say `php /var/www/n1.php`
PunkBuster Server: Running PB Scheduled Task (slot #2) say ^1stats update every 5 min"


say `php /var/www/n1.php` resulteert gewoon in `php /var/www/n1.php` als bericht.

[ Voor 11% gewijzigd door A.Kebab op 21-01-2009 01:04 ]


Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
aartrost schreef op woensdag 21 januari 2009 @ 01:01:
Het cod programma volgens mij. Ik doe gewoon screen -r en dan kom ik in de cod server "omgeving".
Daarin kan ik volgens mij geen normale code uitvoeren. Alleen maar dingen die de cod server begrijpt.
[...]
say `php /var/www/n1.php` resulteert gewoon in `php /var/www/n1.php` als bericht.
Dan gaat er niet veel mogelijk zijn, vrees ik. :/
offtopic:
Gebruik deze screenrc. You'll love it!

[ Voor 11% gewijzigd door gertvdijk op 21-01-2009 01:10 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
gertvdijk schreef op woensdag 21 januari 2009 @ 01:07:
[...]

Dan gaat er niet veel mogelijk zijn, vrees ik. :/
offtopic:
Gebruik deze screenrc. You'll love it!
He wat stom!
Erg bedankt voor de moeite :) Ik ga slaapje doen!

Acties:
  • 0 Henk 'm!

  • DeMoN
  • Registratie: Maart 2001
  • Laatst online: 04-09 12:38

DeMoN

Pastafari

code:
1
exec <config> Executes a config file.


Kan je niet op de achtergrond op je server dat php script draaien, elke 5 minuten of zo. Dat php script moet dan elke keer een configfile creeeren met daarin de stats die jij wilt en die configfile moet dan de commando's bevatten 'say user$ is de nummer $nummer'

als je in die cod4 console dan /exec configfile tikt, dan laadt hij die 'say' die erin staat en jouw php script daar in heeft gezet, snap je? nu alleen nog kijken hoe je dan die /exec configfile commando zelf naar je screen gooit

iemand die weet of je als je wat naar een screensessie wilt gooien je ook gewoon kan echo'en naar een bepaalde tty?

Gamertag: Cosmicv0id
"Het woord Gods is voor mij niets meer dan een expressie en het product van menselijke zwakheid. De Bijbel is een verzamelwerk van legendes die achtenswaardig zijn maar ook primitief en kinderachtig.'' - Albert Einstein


Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
DeMoN schreef op woensdag 21 januari 2009 @ 02:15:
[code]
iemand die weet of je als je wat naar een screensessie wilt gooien je ook gewoon kan echo'en naar een bepaalde tty?
Voor een tty:
echo "blaat" > /dev/tty1

Voor een screen screen:
echo "blaat" > /dev/pts/1

Of bedoel je dat niet?

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
gertvdijk schreef op woensdag 21 januari 2009 @ 01:07:
[...]

Dan gaat er niet veel mogelijk zijn, vrees ik. :/
Jawel hoor, zie http://aperiodic.net/scre...sion_from_the_commandline , als je daar de output van het phpscript in verwerkt, werkt het gewoon lijkt me.

[ Voor 13% gewijzigd door blaataaps op 21-01-2009 09:23 ]


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
blaataaps schreef op woensdag 21 januari 2009 @ 09:22:
[...]
Jawel hoor, zie http://aperiodic.net/scre...sion_from_the_commandline , als je daar de output van het phpscript in verwerkt, werkt het gewoon lijkt me.
(We assume that we have a screen session with the name test running with a window 0.)

screen -S test -p 0 -X stuff 'top^M'

The ^M needs to be literal so type it with ^V in bash for example.
Wat bedoelen ze daar eigenlijk met die ^M?
Ik ga het even proberen uit te vogelen.

@ DeMoN
Dat zou ansich wel kunnen. Maar het probleem is dat ik lastig een cron aan kan maken die dat automatisch voor me doet. Want ik wil om de x minuten dat bericht sturen.

Edit:
code:
1
2
3
4
5
6
7
8
9
10
root@servert:~# screen -ls
There is a screen on:
    4561.web1_cod4  (20-01-09 23:19:36) (Detached)
1 Socket in /var/run/screen/S-root.

root@servert:~# screen -S 4561.web1_cod4 -X stuff 'say test^M'
root@servert:~# screen -S 4561.web1_cod4 -X stuff 'say test'
root@servert:~# screen -S 4561.web1_cod4 -p 0  -X stuff 'say test^M'
root@servert:~# screen -S 4561.web1_cod4 -p 0 -X stuff 'say test'
root@servert:~#

Geven geen response :(

[ Voor 22% gewijzigd door A.Kebab op 21-01-2009 11:18 ]


Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
blaataaps schreef op woensdag 21 januari 2009 @ 09:22:
[...]
Jawel hoor, zie http://aperiodic.net/scre...sion_from_the_commandline , als je daar de output van het phpscript in verwerkt, werkt het gewoon lijkt me.
:o _/-\o_
aartrost schreef op woensdag 21 januari 2009 @ 11:09:
Wat bedoelen ze daar eigenlijk met die ^M?
Ik ga het even proberen uit te vogelen.
Ctrl-V-M. Dus de drie toetsen tegelijk.
aartrost schreef op woensdag 21 januari 2009 @ 11:09:
@ DeMoN
Dat zou ansich wel kunnen. Maar het probleem is dat ik lastig een cron aan kan maken die dat automatisch voor me doet. Want ik wil om de x minuten dat bericht sturen.
Juist cron is daar geschikt voor! Houd wel rekening met de beperkte omgevingsvariabelen die Cron heeft bij het uitvoeren van een taak.

[ Voor 5% gewijzigd door gertvdijk op 21-01-2009 12:32 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
gertvdijk schreef op woensdag 21 januari 2009 @ 12:31:
[...]

:o _/-\o_

[...]

Ctrl-V-M. Dus de drie toetsen tegelijk.

[...]

Juist cron is daar geschikt voor! Houd wel rekening met de beperkte omgevingsvariabelen die Cron heeft bij het uitvoeren van een taak.
Hmm, nee maar ik krijg die commando's dus niet door naar de screen sessie met de cod server erin. Zit er een fout in mijn vorig geposte commands?

Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Hoe heb je die ^M gemaakt?

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
aartrost schreef op woensdag 21 januari 2009 @ 13:15:
Hmm, nee maar ik krijg die commando's dus niet door naar de screen sessie met de cod server erin. Zit er een fout in mijn vorig geposte commands?
Ik heb het ook even uitgeprobeerd, omdat ik wel nieuwsgierig was en ik kreeg het niet voor elkaar in de shell, maar wel als ik de ^M in ViM had gemaakt. Dus:
vim test.sh

Maak je screen commando (dit werkte bij mij):
code:
1
2
#!/bin/bash
screen -S 5221.pts-1.gert-compu -p 0 -X stuff 'top^M'

Sla op, exit, maak executable:
chmod u+x test.sh

Uitvoeren:
./test.sh
aartrost schreef op woensdag 21 januari 2009 @ 11:09:
code:
1
# screen -S 4561.web1_cod4 -p 0 -X stuff 'say test^M'
Zou het moeten zijn. Draait je cod prompt in screen 0?
edit: spelfouten. Nu nog een trucendoos opengooien om bash iets juist te laten interpreteren binnen de single quotes...

[ Voor 22% gewijzigd door gertvdijk op 21-01-2009 17:51 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • BarthezZ
  • Registratie: Juli 2004
  • Niet online

BarthezZ

anti voetbal en slechte djs!

Waarom gebruik je niet gewoon rcon om een commando naar de cod4 server te sturen vanuit je php script? Er is genoeg te vinden over php sockets om te verinden, authenticeren, en dan een commando te sturen.

Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
BarthezZ schreef op woensdag 21 januari 2009 @ 16:12:
Waarom gebruik je niet gewoon rcon om een commando naar de cod4 server te sturen vanuit je php script? Er is genoeg te vinden over php sockets om te verinden, authenticeren, en dan een commando te sturen.
Heb daar 0,0 ervaring mee. Php kan ik opzich wel, maar sockets etc heb ik nog geen kaas van gegeten. Weet jij misschien een voorbeeld? Ik heb namelijk geen idee waar ik dan zou moeten beginnen.

@ Gert.
ga ik vanavond even uitproberen!

Acties:
  • 0 Henk 'm!

  • ppx17
  • Registratie: December 2007
  • Laatst online: 22-08 18:09
Je kan vrij simpel beginnen met fsockopen, kan je gewoon de filesystem functies als fwrite ed. gebruiken. Als je verder wilt dan dat heb je altijd nog de socket functies.

40D | 8 | 50 | 100 | 300


Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Heb je nou al met de juiste screen-opties geprobeerd voordat je je op heel iets anders stort? Dat werkt namelijk gewoon.

Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
blaataaps schreef op woensdag 21 januari 2009 @ 16:56:
Heb je nou al met de juiste screen-opties geprobeerd voordat je je op heel iets anders stort? Dat werkt namelijk gewoon.
Dat ga ik vanavond even uitproberen. Kan dat nu even niet doen.

Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Ah :) Ik dacht al, wat gaat hij nou ingewikkeld doen terwijl het makkelijke er ook nog is :)

Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
Ok, het werkt nu. Ik kan berichten doorzenden naar de server. Maar zoals Gert al zei:
Nu nog een trucendoos opengooien om bash iets juist te laten interpreteren binnen de single quotes...

Dit kan zeker niet met een simpele variabele?

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
aartrost schreef op donderdag 22 januari 2009 @ 00:51:
Nu nog een trucendoos opengooien om bash iets juist te laten interpreteren binnen de single quotes...

Dit kan zeker niet met een simpele variabele?
Nja, de oplossing blijkt makkelijker dan je had durven dromen! :+ De double quotes! Variabele heb ik gebruikt, omdat ik dit beetje netter vindt.
Bash:
1
2
3
#!/bin/bash                                                                     
export TEXT=`date`                                                        
screen -S 5221.pts-1.gert-compu -p 0 -X stuff "echo ${TEXT}^M"


Voor het geval je gaat stuntelen met Cron geef ik je dit kadootje:
crontab -e

code:
1
*/10 * * * * /home/gert/test.sh

Om elke 10 minuten het script /home/gert/test.sh uit te voeren. Check ook even of in je Ubuntu image niet heel stom het anacron pakket geïnstalleerd staat (dat zie je nog wel eens misgaan bij VPS hosters...):
aptitude search anacron

[ Voor 26% gewijzigd door gertvdijk op 22-01-2009 01:21 ]

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • Horrorist618
  • Registratie: November 2003
  • Niet online
Ik draai ook een server en heb bovenstaand scriptje ook even geprobeerd, maar het werkt niet volledig..., echo <date> verschijnt wel in de server zijn console, maar er moet nog op enter gedrukt worden eer ie het uitvoert....? Nu heb ik al geprobeerd met \n \r etc, toe te voegen maar helaas pindakaas...

Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
Horrorist618 schreef op donderdag 22 januari 2009 @ 01:37:
Ik draai ook een server en heb bovenstaand scriptje ook even geprobeerd, maar het werkt niet volledig..., echo <date> verschijnt wel in de server zijn console, maar er moet nog op enter gedrukt worden eer ie het uitvoert....? Nu heb ik al geprobeerd met \n \r etc, toe te voegen maar helaas pindakaas...
Dan moet je de instructies rond het invoeren van een ^M nog eens lezen. :P

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • Horrorist618
  • Registratie: November 2003
  • Niet online
Ik denk het ook. ;)

Acties:
  • 0 Henk 'm!

  • Horrorist618
  • Registratie: November 2003
  • Niet online
Er moest dus eens op Enter (of Ctrl-M) gedrukt worden in het scriptje op het einde van het uit te voeren commando, het werkt nu ;)

Acties:
  • 0 Henk 'm!

  • A.Kebab
  • Registratie: Mei 2005
  • Niet online
Gert, je bent een held! Het werkt als een tierelier!

Duizendmaal dank :)

Edit: Blaataap ook!

[ Voor 13% gewijzigd door A.Kebab op 22-01-2009 15:20 ]


Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 09-09 10:57
aartrost schreef op donderdag 22 januari 2009 @ 14:42:
Gert, je bent een held! Het werkt als een tierelier!
blaataaps is hier de held. Dat van bash is een soort van basiskennis. blaataaps wees hier op de essentiële mogelijkheid van screen, wat hier van groter belang is.
* gertvdijk had nooit kunnen denken nog te kunnen helpen bij iets wat te maken heeft met games. :D Ik speel geen games, laat staan dat ik nu weet wat cod is. :+

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.

Pagina: 1