Das Skript init.d wird beim Start nicht ausgeführt

15

Ich hoste einige Counter-Strike-Spieleserver auf meinem dedizierten Server mithilfe des Bildschirms. Ich habe dieses Skript, das ich ausführe, wenn ich die Server starten / stoppen möchte:

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

Ich habe dieses Skript (aufgerufen css-servers) in /etc/init.d/und nach meinem Wissen eingefügt, das heißt, es wird ausgeführt, wenn das System hochfährt. Wenn ich jedoch aktive Bildschirme mit überprüfe, screen -lswerden keine ausgeführt.

Wie kann ich diese beim Start unter Ubuntu Server ausführen lassen?

Mark Twaign
quelle

Antworten:

33

Es /etc/init.dreicht nicht aus , das Skript nur in zu haben, damit es beim Start ausgeführt wird.

Um es zu Ihrem Startup hinzuzufügen, müssen Sie Ubuntu darüber informieren:

sudo update-rc.d css-servers defaults

Es sollte dann beim nächsten Start gestartet werden, wenn das Skript ordnungsgemäß formatiert ist, ausführbare Bits gesetzt sind usw. Pakete, die Sie über apt-get/ Software Center installieren, führen diesen oder einen entsprechenden Befehl automatisch für Sie aus, weshalb Sie sich normalerweise keine Sorgen machen müssen darüber.

Wenn Sie es sofort starten möchten, können Sie es direkt aufrufen:

sudo service css-servers start
Michael Hampton
quelle
Das ist extrem seltsam. Bis zu diesem Zeitpunkt wurde mein Skript beim Start ohne diesen update-rc.dBefehl ausgeführt. Ich habe mein Skript aktualisiert, dann lief es erst wieder, nachdem ich diesen Befehl ausgeführt habe. Vielen Dank. Wie können wir es übrigens "abmelden", wenn es beim Start ausgeführt wird (wie wir es bei update-rc.d getan haben)?
Nikos
1
@ Nik-Lz Diese Fragen und Antworten beziehen sich auf alte und veraltete Versionen von Ubuntu, die Upstart verwendet haben. Es sollte nicht mehr verwendet werden, sondern das aktuelle Systemd (das ein völlig anderes Dienstsystem verwendet).
Michael Hampton
7

Du hast den ersten Teil erledigt. /etc/init.dHier werden Initialisierungsskripten ausgeführt. Sie werden jedoch nicht automatisch ausgeführt.

Sie werden in der Reihenfolge ausgeführt, wie durch symbolische Verknüpfungen der /etc/rc*.dVerzeichnisse angegeben. Jede Ausführungsebene hat ein eigenes Verzeichnis. Skripte mit Verknüpfungsnamen, die mit beginnen, Kwerden mit dem Stop-Parameter und Skripte mit Namen , die mit beginnen S, mit dem Start-Parameter ausgeführt. Üblicherweise beginnen die Dateinamen mit Koder Sgefolgt von einer zweistelligen Nummer, die für die Sequenzierung verwendet wird, und enden mit dem Namen des Skripts in /etc/init.d.

Die Links können manuell erstellt werden, werden jedoch in der Regel mit einem Skript erstellt. Das generische Skript update-rc.dist unter Ubuntu verfügbar. Der Befehl enthält man update-rc.deine Dokumentation darüber, wer ihn verwenden soll. In Ihrem Fall versuchen Sie:

sudo update-rc.d css-servers defaults

Um es mit dem Init-Skript zu starten, versuchen Sie:

sudo /etc/init.d/css-servers start

Normalerweise starte und stoppe ich den Server auf diese Weise, um sicherzustellen, dass das Skript wie gewünscht funktioniert. Dann rufe ich update-rc.dauf, um es den /etc/rc.dRunlevel-Verzeichnissen hinzuzufügen .

BillThor
quelle
1

Wenn Sie keine Ahnung haben, warum Ihr Dienst beim Booten nicht gestartet wird. Es funktioniert jedoch ordnungsgemäß, wenn Sie versuchen, den Dienst manuell zu starten service <your service> start. Versuchen Sie in diesem Fall, die Standardausgabe und die Fehlerausgabe in eine Datei umzuleiten. Dies kann Ihnen einen Anhaltspunkt dafür geben, warum es beim Booten des Systems nicht gestartet wird.

zB innerhalb Ihres Skripts

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0
Pandurang Patil
quelle