• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Boot Skript für Gameserver unter openSUSE 10.3

bennyn

Newbie
Hallo!

Ich habe einen Gameserver für AssaultCube, der sich auch über die Kommandozeile fehlerfrei starten lässt.
Nun möchte ich automatisch beim Hochfahren meines VirtualServers (openSUSE 10.3 inkl. Plesk 8.4) den Gameserver gleich mitstarten.

Dazu habe ich folgendes Skript (.sh):

/usr/games/ac/acserver.sh
#!/bin/sh
#
# example AssaultCube-Server launch script
# by MeatROme - see http://assault.cubers.net/wiki/Server_setup
# naturally also check your local documentation (docs) folder in the game-installation directory

# how many clients can connect?
PLAYERS=14

# server description
NAME='Mein Server'

# Message Of The Day
MOTD='Hallo'

# kick player when frag-count is ..
FRAGS=-2

TS=$(date +%Y%m%d_%H%M%S)
TSH=$(date +%H:%M:%S\ %d.%m.%y)

#
# run the script (server) with "screen":
#
screen
irssi
cd /usr/games/ac/bin_unix/
./linux_server -c$PLAYERS -n"$NAME" -o"$MOTD" -k$FRAGS > ServerLog_$TS 2>&1
^a d

Das Kommando in der letzten Zeile ^a d soll ein Ersatz für den Befehl Strg + A zusammen mit STRG + D sein, welchen ich sonst in der Konsole immer drücke, um GNU screen zu trennen (detach). Wenn ich allerdings manuell in der Konsole ^a d eingebe, scheint das nicht zu funktionieren. Ich habe aber gelesen, dass das eigentlich so gehen müsste, weshalb diese Zeile noch im Skript steht.

Kommen wir zum Startup-Skript, was beim Booten geladen werden soll, um den Server durch einen Aufruf der Datei acserver.sh zu starten:

/etc/init.d/acstartup
Code:
#! /bin/sh

ACSERV_BIN=/usr/games/ac/acserver.sh

### BEGIN INIT INFO
# Provides:       assaultcube server
# Required-Start: $network
# X-UnitedLinux-Should-Start:
# Required-Stop:
# Default-Start:  3
# Default-Stop:
# Description:    AssaultCube Gameserver
### END INIT INFO

. /etc/rc.status
rc_reset

case "$1" in
    start)
        echo -n "Starting AC server: "
        startproc $ACSERV_BIN
        rc_status -v
        ;;
    stop)
        echo -n "Shutting down AC server daemon: "
        killproc -TERM $ACSERV_BIN
        rc_status -v
        ;;
    status)
        echo -n "Checking for AC server daemon: "
        checkproc $ACSERV_BIN
        rc_status -v
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        ;;
esac
rc_exit

Mein Server läuft im runlevel 3 weshalb ich das Startup-Skript wie folgt verlinkt habe:

ln -s /etc/init.d/acstartup /etc/rc3.d/S12acstartup

Doch das funktioniert nicht. Ich habe mich auch schon an die openSUSE Dokumentation (SDB:Create your own init scripts) gehalten und eine Verlinkung mit dem Ordner /sbin/ ausprobiert:

ln -s /etc/init.d/acstartup /sbin/rcacstartup

Ebenfalls ohne Erfolg. :(

Vielleicht kann mir ja hier jemand weiterhelfen.

Würde mich sehr freuen :)
 

rolle

Guru
Ist das Startscript ausführbar? Warum willst Du das in Screen laufen lassen? Wenn Du das per Init-Script startest, brauchst Du das nicht. Und füge das Startscript besser per insserv ein, die symbolische Verlinkung von Hand ist mit SuSE nicht immer vom Erfolg gekrönt.
 
OP
B

bennyn

Newbie
Vielen Dank für die Antwort.

Inwiefern ist das mit der Ausführbarkeit gemeint? Ich hoffe doch, dass es ausführbar ist.
Genau sagen kann ich es nicht, da ich mir das nur aus Lösungsansätzen zusammen kopiert habe.

Ich möchte den Gameserver in "screen" laufen lassen, damit sich der Task nicht beendet.
Wie könnte ich das ohne machen? Etwa mit diesem nohup-Befehl?

Die Verlinkung von insserv habe ich mir gerade angeschaut.
Ist es okay, wenn ich das Script nur in runlevel 3 verlinke?
 

rolle

Guru
Eine Datei ist ausführbar, wenn sie in den Dateirechten das Attribut 'x' gesetzt hat. -> man chmod
Wenn der Server per Initscript läuft, dann ist er an keine Konsole gebunden und wird also nicht beendet, wenn Du Dich abmeldest.
Wenn Du die Init Info im Initscript komplett ausfüllst, dann klappt das mit insserv besonders gut. Nimm Dir am Besten ein bestehendes Script als Vorbild, z.B, /etc/init.d/sshd und/oder /etc/init.d/skeleton. In letzterer sind auch ausführliche Beschreibungen der einzelnen Optionen enthalten.
 
OP
B

bennyn

Newbie
Also, die Datei acstartup ist ausführbar (chmod 0744).

Um das Ganze nicht zu komplizieren, habe ich meinen Code umgeschrieben, so dass jetzt nur noch die Datei acstartup mit folgendem Inhalt existiert:

Code:
#! /bin/sh
### BEGIN INIT INFO
# Provides: acstartup
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Starts the assaultcube server daemon
### END INIT INFO

. /etc/rc.status
rc_reset

case "$1" in
    start)
        echo "Starting AC server: "
        cd /usr/games/ac/
        nohup bin_unix/linux_server -c14 -n"Mein Server" -o"Hallo"
        rc_status -v
        ;;
    *)
        echo "Exit"
        exit 1
        ;;
esac
rc_exit

Allerdings funktioniert selbst das nicht. :(
 

rolle

Guru
Klappt es damit?
Code:
#! /bin/sh
### BEGIN INIT INFO
# Provides: acstartup
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Starts the assaultcube server daemon
### END INIT INFO

. /etc/rc.status
rc_reset

case "$1" in
    start)
        echo "Starting AC server: "
        startproc -f /usr/games/ac/bin_unix/linux_server -c14 -n"Mein Server" -o"Hallo"
        rc_status -v
        ;;
    *)
        echo "Exit"
        exit 1
        ;;
esac
rc_exit
 
OP
B

bennyn

Newbie
Hi rolle,
selbst damit klappt es leider nicht.

Ich habe das Script extra nochmal mit insserv eingebunden. :(

Ich find's auch ziemlich erschreckend, dass ich sowas nicht auf Anhieb hinbekomme. Immerhin ist das doch in Linux eigentlich eine Nebenbeiaufgabe? :D

Gibt es eventuell ein gutes Serverbuch was sich mit openSUSE 10.3 (oder neuer) und Plesk beschäftigt? Ich habe auf Amazon mal geschaut und finde dort nur Bücher die davon ausgehen, dass man eine grafische Oberfläche hat (bei meinem VirtualServer nicht der Fall) oder Bücher, die einem den Grundaufbau (von der Installation bis zur Einrichtung des Netzwerks) erklären. Was mich aber viel mehr interessieren würde ist der Betrieb im funktionsfähigen Zustand, sprich: Arbeiten mit der Konsole, Serversicherheit, Konfiguration von Programmen (ich denke da so an SpamAssassin, Virenscanner, ...) und eben auch das Entwickel von Ini-Skripten. Immerhin möchte ich ja nicht ständig dumm aus der Wäsche gucken. :p

So, nun aber back to topic!

Ich bin mir sicher, dass wir das gebändigt kriegen! :)
 

rolle

Guru
Gibt es irgendwelche Fehlermeldungen wenn Du das starten willst? Kannst Du den Server starten, wenn Du die Befehlszeile aus dem Startscript direkt in der Konsole absetzt?
Als Notnagel bleibt jenseits des Initscripts noch die Möglichkeit, in der /etc/crontab einen Cronjob zum Zeitpunkt '@reboot' zu erstellen und den Gameserver damit zu starten.
 
OP
B

bennyn

Newbie
Der Server lässt sich manuell über startproc -f /usr/games/ac/bin_unix/linux_server -c14 -n"Mein Server" -o"Hallo" starten.
Also kann daran nicht viel falsch sein. :???:

Ich habe jetzt mal die Idee mit dem Cronjob verfolgt und na ja...
ES GEEEEEEEEEEEEHHHHHHHHHHHHHHHHHHHHTTTT!! :)

Ist ein Cron-Auftrag die schlechtere Variante oder kann man das ruhig so lassen?

Vielen Dank schon mal im Voraus.
Jetzt bin ich echt erleichtert. Dachte schon das klappt gar nicht mehr.

Ein großes Dankeschön!
 

rolle

Guru
Naja, das müßte schnell gehen:
Code:
@reboot root startproc -f /usr/games/ac/bin_unix/linux_server -c14 -n"Mein Server" -o"Hallo"
Diese Zeile in /etc/crontab einfügen.
Und noch etwas ganz anderes am Rande: Von Packman gibt es das Spiel fertig gepackt als RPM, damit könntest Du eventuell besser fahren, vor allem was Updates angeht.
--> packman.links2linux.de -->assaultcube suchen
 
Oben