Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: sourceserver.info. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

motte

Fortgeschrittener

  • »motte« ist der Autor dieses Themas

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

1

Sonntag, 26. Juni 2011, 10:35

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

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

2

Sonntag, 26. Juni 2011, 11:07

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:

Quellcode

1
@reboot /home/gs/script.sh


Beispiel Script:

Quellcode

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

Fortgeschrittener

  • »motte« ist der Autor dieses Themas

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

3

Sonntag, 26. Juni 2011, 11:14

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:

Quellcode

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

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »motte« (26. Juni 2011, 11:35)


Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

4

Sonntag, 26. Juni 2011, 11:34

Das Script würde dann so aussehen

Quellcode

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

Fortgeschrittener

  • »motte« ist der Autor dieses Themas

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

5

Sonntag, 26. Juni 2011, 11:37

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

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

6

Sonntag, 26. Juni 2011, 11:38

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

Die Zeitangabe ist ja @reboot

MfG
Impact

motte

Fortgeschrittener

  • »motte« ist der Autor dieses Themas

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

7

Sonntag, 26. Juni 2011, 12:00

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?

Quellcode

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)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »motte« (26. Juni 2011, 12:08)


Kathy

Fortgeschrittener

Beiträge: 523

Wohnort: München

Beruf: Roaster/Freelance Editor

Rootserver vorhanden: Ja

  • Nachricht senden

8

Sonntag, 26. Juni 2011, 12:21

Welches Startscript hast du denn jetzt zum Ausfuehren genommen?


NTcgNjggNmYgNjEgMmUgMjAgNDQgNjUgNmEgNjEgMjAgNzYgNzUgMmU=

Wer weiss was das ist?

motte

Fortgeschrittener

  • »motte« ist der Autor dieses Themas

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

9

Sonntag, 26. Juni 2011, 12:27

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:

Quellcode

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:

Quellcode

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

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »motte« (26. Juni 2011, 12:35)


Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

10

Sonntag, 26. Juni 2011, 22:42

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


MfG
Impact

motte

Fortgeschrittener

  • »motte« ist der Autor dieses Themas

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

11

Freitag, 7. Oktober 2011, 23:37

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

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

12

Samstag, 8. Oktober 2011, 00:17

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

MfG
Impact

motte

Fortgeschrittener

  • »motte« ist der Autor dieses Themas

Beiträge: 378

Beruf: Management

Rootserver vorhanden: Ja

  • Nachricht senden

13

Samstag, 8. Oktober 2011, 01:42

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

Eintrag in der etc/crontab:

Quellcode

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


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

Quellcode

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

14

Samstag, 8. Oktober 2011, 14:58

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

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

15

Samstag, 8. Oktober 2011, 19:20

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

Quellcode

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



MfG
Impact

Beiträge: 5

Wohnort: NRW

Beruf: ITler

Rootserver vorhanden: Ja

  • Nachricht senden

16

Mittwoch, 12. Oktober 2011, 00:38

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

17

Mittwoch, 12. Oktober 2011, 12:34

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?

Beiträge: 5

Wohnort: NRW

Beruf: ITler

Rootserver vorhanden: Ja

  • Nachricht senden

18

Mittwoch, 12. Oktober 2011, 20:48

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 ^^

Zitat

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

Ähnliche Themen