Toon posts:

[script]proces naar de achtergrond en output naar logfile

Pagina: 1
Acties:

Verwijderd

Topicstarter
hoi,
ik wil een sof2 servertje draaien. nou leek het me wel handig om een start/stop script te maken dus ik ben fijn aan de slag gegaan. nu heb ik dit stukje code eruit gehaald want dit werkt blijkbaar niet.
de bedoeling is dat ik sof2ded start als user "myuser", het process naar de achtergrond stuur en de output naar een logfile (of /dev/null) stuur. ook moet de PID van het process naar een bestand geschreven worden (dit werkt wel).

als ik het volgende scriptje gebruik gaat het programma wel naar de achtergrond, maar krijg ik de output nog in mijn console te zien.


code:
1
2
3
4
5
6
7
SUID="bash -c su myuser -c"
MYLOCKFILE=/home/myuser/sof2/pid

MYEXECMD="./sof2ded +set dedicated 2 +set net_ip 111.111.111.111 +set net_port 20000 \ 
+seta g_log test.log +exec myserver.cfg >> $MYLOGFILE &"

$SUID "$MYEXECMD echo \$! > $MYLOCKFILE"

[ Voor 5% gewijzigd door Verwijderd op 29-03-2003 21:37 . Reden: layout ]


Verwijderd

Een dedicated server start toch sowieso in de background lijkt me, misschien start je het verkeerde op?

probeer het eens met "sudo -u myuser /command > /dev/null"

  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:03
en ook 2>/dev/null (als je anders nog steeds uitvoer krijgt)

Verwijderd

Heb je al iets geprobeerd met: script of screen?

Verwijderd

Misschien is een init.d script een idee?

Verwijderd

Topicstarter
Verwijderd schreef op 28 maart 2003 @ 22:50:
Een dedicated server start toch sowieso in de background lijkt me, misschien start je het verkeerde op?

probeer het eens met "sudo -u myuser /command > /dev/null"
de dedicated server start niet in de achtergrond, dus het zal met een bash commando moeten. ik zal de commando´s die hier gegeven zijn vanavond eens proberen.

Verwijderd

Ik deed het vroeger ongeveer zo:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
# start scriptje voor $gameserver
# Copyright Tribunal 2003(c)
#!/bin/sh

cd  /gameservers/quake/


while :
do
        echo Quake Server restarted on `date` >>server.log
        /gameservers/quake/q3ded +set dedicated 2 +set logfile 2 etc... 2>&1 \ 
| tee -a /gameservers/logs/quakeserver.tee.log
done


De laatste regel dus.

[ Voor 42% gewijzigd door Verwijderd op 29-03-2003 21:37 . Reden: layout ]


Verwijderd

Topicstarter
wat doet dit stukje code precies ?
code:
1
2>&1 | tee -a /gameservers/logs/quakeserver.tee.log

[ Voor 5% gewijzigd door Verwijderd op 29-03-2003 20:52 ]


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Dat stukje zorgt ervoor dat alle output naar stderr (file descriptor 2) naar stdout (file descriptor 1) gestuurd wordt. Met de '|' wordt stdout (en door 2>&1 dus ook stderr) naar de stdin van het programma 'tee' gestuurd. tee stuurt alles wat op stdin binnenkomt naar een bestand _en_ naar stdout.

"He took a duck in the face at two hundred and fifty knots."


Verwijderd

_Squatt_ schreef op 29 maart 2003 @ 20:56:
Dat stukje zorgt ervoor dat alle output naar stderr (file descriptor 2) naar stdout (file descriptor 1) gestuurd wordt. Met de '|' wordt stdout (en door 2>&1 dus ook stderr) naar de stdin van het programma 'tee' gestuurd. tee stuurt alles wat op stdin binnenkomt naar een bestand _en_ naar stdout.
jah, ik draai er eigenlijk nog screen omheen, is wel zo handig als je re-attached, dat je direct de status meldinkjes weer ziet.

  • Papillon
  • Registratie: Januari 2000
  • Laatst online: 07-05 22:41

Papillon

Spring 's in the Air...

$SUID "$MYEXECMD echo \$! > $MYLOCKFILE"

Hier geef je twee commando's. Dat kan je beter doen door ze te scheiden met een punt-komma. Dus:

$SUID "$MYEXECMD ;echo \$! > $MYLOCKFILE"

Ten tweede kun je de stdout en/of stderr data redirecten naar een bestand. Wil je ze beiden redirecten kun je het best het volgende gebruiken:

>>logbestand 2>&1

Hiermee append je de output in het logbestand en sluit je stderr meldingen door daar stdout.

F u cn rd ths, u mght hv a gd jb n cmptr prgmmng.


Verwijderd

Topicstarter
mijn dank heren.
ik gebruik nu de volgende code, die perfect blijkt te werken;

code:
1
2
3
4
5
6
SUID="bash -c su myuser -c"
MYLOCKFILE=/home/myuser/sof2/pid
MYEXECMD="./sof2ded +set dedicated 2 +set net_ip 111.111.111.111 +set net_port 20000  
+seta g_log test.log +exec myserver.cfg &

$SUID "$MYEXECMD echo \$! > $MYLOCKFILE" >>$MYLOGFILE 2>&1


ps.
Papillon; jouw suggestie om de 2 commando's te te scheiden met een ; werkt niet. ik krijg dan een syntax fout. vandaar dat ik dit niet gebruik.
Pagina: 1