You are not logged in.

motte

Intermediate

  • "motte" started this thread

Posts: 378

Occupation: Management

wcf.user.option.userOption53: Ja

  • Send private message

1

Sunday, June 26th 2011, 10:35am

Einfaches CS:S Server Start Script für Lenny?

Hallo,

Ich bin auf der Suche nach einem einfachen Start Script, welches mir 3 Gameserver nach z.B. dem abschalten des Roots Servers erneut mit dem Betriebssystem startet, weil es bei mir öfter mal vorkommt das der Server vom Provider wegen Wartungsarbeiten neu gestartet wird, dann sind natürlich jedes mal die Gameserver offline.

Einzige Bedingung ist das halt der Standard Start Parameter z.B. "screen -AmdS office ./srcds_run -console -game cstrike +map cs_office -maxplayers 16 -autoupdate -ip 80.246.62.183 -port 27017 -insecure" unter dem user "gameserver" läuft.

Wie schon gesagt sollte das ganze sehr einfach sein, bitte keine zusätzlichen Features. Geht sowas vielleicht mittels Crontab?

MfG,
motte

Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

2

Sunday, June 26th 2011, 11:07am

Natürlich geht das ;)
Du schreibst dir einfach ein Script in was du deine Befehle zum Starten der Server packst, und gibst das Script dann im Crontab an
Müsste @reboot gesesen sein (*manual lesen tu*)

Beispiel Crontab:

Source code

1
@reboot /home/gs/script.sh


Beispiel Script:

Source code

1
2
3
4
5
if [[ ! `screen -ls |grep screenname` ]]; then
  /home/gs/serverx/startscript.sh
fi

...


Für bessere Angaben Beispiele und Infos musst du mehr Informationen geben :)
Ich persönlich würde das in Verbindung mit einem Startscript machen (Siehe meine Signatur)

MfG
Impact

motte

Intermediate

  • "motte" started this thread

Posts: 378

Occupation: Management

wcf.user.option.userOption53: Ja

  • Send private message

3

Sunday, June 26th 2011, 11:14am

Das Startscript ist mir zu heavy, hatte da schonmal drüber geschaut, allerdings brauche ich die ganzen Funktionen da nicht. Mir geht es einfach nur darum das alle 3 Gameserver mit dem OS wieder hochfahren.

Ok, also ich möchte nun meine 3 Gameserver mit den Screen Namen "gungame", "soccer" und "office" starten unter dem Benutzer "gameserver". Die Pfade sind unter diesem Benutzer abgelegt und lauten wie folgt:
/home/gameserver/gungame
/home/gameserver/soccer
/home/gameserver/office

In das Script dort wo du nun die Punkte hast packe ich die 3 Startbefehle? Also quasi so:

Source code

1
2
3
4
5
6
7
if [[ ! `screen -ls |grep screenname` ]]; then
  /home/gs/serverx/startscript.sh
fi

screen -AmdS soccer ./srcds_run -console -game cstrike +map ka_soccer_2006_v3fix2 -maxplayers 12 -autoupdate -ip 80.246.62.183 -port 27015 -secure
screen -AmdS gungame ./srcds_run -console -game cstrike +map GG_FY_FEIERABEND -maxplayers 16 -autoupdate -ip 80.246.62.183 -port 27016 -secure
screen -AmdS office ./srcds_run -console -game cstrike +map cs_office -maxplayers 16 -autoupdate -ip 80.246.62.183 -port 27017 -secure

This post has been edited 2 times, last edit by "motte" (Jun 26th 2011, 11:35am)


Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

4

Sunday, June 26th 2011, 11:34am

Das Script würde dann so aussehen

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
if [[ ! `screen -ls |grep soccer` ]]; then
  cd /home/gameserver/soccer/orangebox
  screen -AmdS soccer ./srcds_run -console -game cstrike +map ka_soccer_2006_v3fix2 -maxplayers 12 -autoupdate -ip 80.246.62.183 -port 27015 -secure
fi

# Mal nen Moment warten
sleep 2

if [[ ! `screen -ls |grep gungame` ]]; then
  cd /home/gameserver/gungame/orangebox
  screen -AmdS gungame ./srcds_run -console -game cstrike +map GG_FY_FEIERABEND -maxplayers 16 -autoupdate -ip 80.246.62.183 -port 27016 -secure
fi
...

Im Prinzip ist die Abfrage unnötig, aber man weiß ja nie :)

Ps. Das sind natürlich alles nur Beispiele wie man es machen kann, die anderen haben sicher auch noch (bessere) Ideen.


MfG
Impact

motte

Intermediate

  • "motte" started this thread

Posts: 378

Occupation: Management

wcf.user.option.userOption53: Ja

  • Send private message

5

Sunday, June 26th 2011, 11:37am

Ok, und muss dann keine Zeitangabe bei den Crontab bei?

Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

6

Sunday, June 26th 2011, 11:38am

Ok, und muss dann keine Zeitangabe bei den Crontab bei?

Die Zeitangabe ist ja @reboot

MfG
Impact

motte

Intermediate

  • "motte" started this thread

Posts: 378

Occupation: Management

wcf.user.option.userOption53: Ja

  • Send private message

7

Sunday, June 26th 2011, 12:00pm

Ok, das Startscript läuft, gerade mal manuell ausgeführt. Aber der Cron startet es dann später nicht, habe unter etc/crontab nun ja folgendes eingetragen @reboot /home/gameserver/startscript.sh darunter wieder eine Zeile leer gelassen.

Der syslog sagt dazu nur "bad command" kann es sein das der reboot anders angegeben werden muss?

Source code

1
2
3
4
Jun 26 11:58:35 server /usr/sbin/cron[1719]: (CRON) INFO (pidfile fd = 3)
Jun 26 11:58:35 server /usr/sbin/cron[1720]: (CRON) STARTUP (fork ok)
Jun 26 11:58:35 server cron[1720]: Error: bad command; while reading /etc/crontab
Jun 26 11:58:35 server /usr/sbin/cron[1720]: (CRON) INFO (Running @reboot jobs)

This post has been edited 1 times, last edit by "motte" (Jun 26th 2011, 12:08pm)


Kathy

Intermediate

Posts: 523

Location: München

Occupation: Roaster/Freelance Editor

wcf.user.option.userOption53: Ja

  • Send private message

8

Sunday, June 26th 2011, 12:21pm

Welches Startscript hast du denn jetzt zum Ausfuehren genommen?


NTcgNjggNmYgNjEgMmUgMjAgNDQgNjUgNmEgNjEgMjAgNzYgNzUgMmU=

Wer weiss was das ist?

motte

Intermediate

  • "motte" started this thread

Posts: 378

Occupation: Management

wcf.user.option.userOption53: Ja

  • Send private message

9

Sunday, June 26th 2011, 12:27pm

Das von Impact ^^

Es läuft aber jetzt, der Eintrag unter crond muss so aussehen:

@reboot gameserver /home/gameserver/startscript.sh

Also ich hatte den Benutzer "gameserver" vergessen! Danke nochmal, genau das habe ich gesucht :)

Also für alle anderen die auch sowas suchen, hier nochmal kurz erklärt:

Eintrag in der etc/crontab:

Source code

1
@reboot benutzer /home/benutzer/startscript.sh

!!! Wichtig, unter der letzten Zeile immer eine Leerzeile, sonst funktioniert die crontab nicht mehr !!!

Und das Startscript für den Server unter /home/benutzer/startscript.sh erstellen:

Source code

1
2
3
4
if [[ ! `screen -ls |grep dein-screen-server-name` ]]; then
  cd /home/benutzer/servername/orangebox
  screen -AmdS dein-screen-server-name ./srcds_run -console -game cstrike +map cs_office -maxplayers 12 -autoupdate -ip 80.246.XX.XX -port XXXXXX -secure
fi

This post has been edited 4 times, last edit by "motte" (Jun 26th 2011, 12:35pm)


Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

10

Sunday, June 26th 2011, 10:42pm

Ich ging davon aus, dass du das mit crontab -l unter deinem Gameserveruser machst :D
Aber nun klappt ja alles.


MfG
Impact

motte

Intermediate

  • "motte" started this thread

Posts: 378

Occupation: Management

wcf.user.option.userOption53: Ja

  • Send private message

11

Friday, October 7th 2011, 11:37pm

Ich hab da jetzt nochmal eine Frage, gibt es auch eine Möglichkeit mittels Crontab oder Startscript abzufragen ob der/die Gameserver wirklich auch laufen? Denn ich hatte nun schon 2-3 mal das die Gameserver nicht mitgestartet wurden, dann musste ich das ganze nochmal per Hand neustarten, damit alles korrekt angelaufen ist.

Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

12

Saturday, October 8th 2011, 12:17am

Natürlich, kommt darauf an wie du deine Gameserver startest.

MfG
Impact

motte

Intermediate

  • "motte" started this thread

Posts: 378

Occupation: Management

wcf.user.option.userOption53: Ja

  • Send private message

13

Saturday, October 8th 2011, 1:42am

Hi, wie ichs oben angegeben habe, das ist mein Startscript:

Eintrag in der etc/crontab:

Source code

1
@reboot gameserver /home/gameserver/startscript.sh


Und das Startscript für den Server unter /home/gameserver/startscript.sh erstellen:

Source code

1
2
3
4
if [[ ! `screen -ls |grep server1` ]]; then cd /home/gameserver/server1/orangebox

screen -AmdS server1 ./srcds_run -console -game cstrike +map cs_office -maxplayers 12 -autoupdate -ip 80.246.XX.XX -port XXXXXX -secure
fi

Rudi23

Unregistered

14

Saturday, October 8th 2011, 2:58pm

Ich danke an der Stelle auch mal für die Anleitung. Genau sowas hat mir auch noch gefehlt. :-D

Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

15

Saturday, October 8th 2011, 7:20pm

Ich hatte mit Screen und Grep schon einige Problemchen gehabt.

Meine Vorschläge:
- Benenne die Sessions individueller
- server1-running

- Starte den Server über ein Usercrontab
- Crontab -e

- Starte nicht alle Server gleichzeitig, bzw nicht sofort
- Sleep 60 im Startscript

Eine andere Möglichkeit wäre ein Initscript
Ansonsten heißt es wie immer Logs anschauen :D

Ob es am Script liegt kannst du leicht selbst nachvollziehen

Source code

1
clear; screen -ls |grep server1 && echo 'Gefunden' || echo 'Nicht gefunden'



MfG
Impact

Posts: 5

Location: NRW

Occupation: ITler

wcf.user.option.userOption53: Ja

  • Send private message

16

Wednesday, October 12th 2011, 12:38am

Du kannst auch deinen Gameserver mit dem Parameter -pidfile pid.txt starten. Damit erhälst du in deinem Gameserverserzeichnis eine Texstdatei "pid.txt" in der die Process ID des Gameserver steht.

Mit einem Einzeiler, sowas wie ps | grep `cat /home/gameserver/serverx/css/pid.txt` in einer if Abfrage und Du weißt, ob der Gameserverprocess läuft.

Wenn man nur nach einer vorhandenen screen Session guckt, weiß man nur, ob die screen Session läuft, aber nicht ob auch der Gameserver in der Session noch läuft, der kann ja vielleicht abgestürzt sein.

MFG
Rudi_the_Striker

Rudi23

Unregistered

17

Wednesday, October 12th 2011, 12:34pm

Wenn man nur nach einer vorhandenen screen Session guckt, weiß man nur, ob die screen Session läuft, aber nicht ob auch der Gameserver in der Session noch läuft, der kann ja vielleicht abgestürzt sein.
Nur mal interesse halber die Frage:
Wenn der Server wirklich komplett abstürzt (also vollständig beendet wird) dann schliesst sich doch auch die Screen-Session?
Hängt der Server nur fest (was ja meistens der Fall ist) dann tut er einem auch nicht mehr den Gefallen, das pid-File zu löschen.
Von daher macht das mit dem pid-File doch eigentlich wenig Sinn?

Posts: 5

Location: NRW

Occupation: ITler

wcf.user.option.userOption53: Ja

  • Send private message

18

Wednesday, October 12th 2011, 8:48pm

Wenn man nur nach einer vorhandenen screen Session guckt, weiß man nur, ob die screen Session läuft, aber nicht ob auch der Gameserver in der Session noch läuft, der kann ja vielleicht abgestürzt sein.


Nur mal interesse halber die Frage:
Wenn der Server wirklich komplett abstürzt (also vollständig beendet wird) dann schliesst sich doch auch die Screen-Session?


Da bin ich nicht 100%ig sicher ^^

Quoted

Hängt der Server nur fest (was ja meistens der Fall ist) dann tut er einem auch nicht mehr den Gefallen, das pid-File zu löschen.
Von daher macht das mit dem pid-File doch eigentlich wenig Sinn?


Jaein, du hast recht, das Pidfile wird nicht gelöscht (ich mein es wird sogar nie gelöscht, auch nicht wenn der Server runtergefahren wird), aber dass ist egal, denn mein kleines Beispiel ließt die Pid aus dem Pidfile und guckt mit ps nach, ob die Pid vorhanden ist. Ist die Pid vorhanden läuft der Server, ob er richtig funktioniert weiß man natürlich nicht (um das genauer zu analysieren müsste man den Status direkt beim Gameserver abfragen. müsste man mal googlen ob es Statusscript für die Bash gibt, sowas wie man es für php bekommt).

MFG
Rudi_the_Striker

Similar threads