Le script init.d ne s'exécute pas au démarrage

15

J'héberge des serveurs de jeu Counter-Strike sur mon serveur dédié en utilisant l'écran. J'ai ce script que j'exécute lorsque je veux démarrer / arrêter les serveurs:

#! /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

J'ai mis ce script (appelé css-servers) /etc/init.d/et à ma connaissance, cela signifie qu'il s'exécute lorsque le système démarre. Cependant, lorsque je vérifie les écrans actifs à l'aide, screen -lsil n'y en a pas.

Comment puis-je les exécuter au démarrage sous Ubuntu Server?

Mark Twaign
la source

Réponses:

33

Le simple fait d'avoir le script présent dans /etc/init.dne suffit pas pour qu'il s'exécute au démarrage.

Pour l'ajouter à votre startup, vous devez en informer Ubuntu:

sudo update-rc.d css-servers defaults

Il devrait ensuite démarrer au prochain démarrage, si le script est correctement formaté, ensemble de bits exécutables, etc. Les packages que vous installez à partir de apt-get/ Software Center exécutent automatiquement cette commande ou son équivalent pour vous, c'est pourquoi vous n'avez généralement pas à vous inquiéter à propos de ça.

Si vous souhaitez le démarrer immédiatement, vous pouvez l'appeler directement:

sudo service css-servers start
Michael Hampton
la source
C'est extrêmement étrange. Jusqu'à ce point, mon script s'exécute au démarrage sans cette update-rc.dcommande. J'ai mis à jour mon script, puis il ne s'est plus exécuté jusqu'à ce que j'exécute cette commande. Merci. Soit dit en passant, comment pouvons-nous «annuler l'enregistrement» de l'exécution au démarrage (comme nous l'avons fait avec update-rc.d)?
Nikos
1
@ Nik-Lz Ce Q&R se réfère à des versions anciennes et obsolètes d'Ubuntu qui utilisaient par le haut. Il ne devrait plus être utilisé, mais plutôt le systemd actuel (qui utilise un système de service complètement différent).
Michael Hampton
7

Vous avez terminé la première partie. /etc/init.dest l'endroit à partir duquel les scripts d'initialisation sont exécutés. Cependant, ils ne sont pas exécutés automatiquement.

Ils sont exécutés dans l'ordre spécifié par les liens symboliques entre les /etc/rc*.drépertoires. Chaque niveau d'exécution a son propre répertoire. Les scripts dont le nom de lien commence par Ksont exécutés avec le pararmeter stop et ceux dont le nom commence par Ssont exécutés avec le paramètre start. Par convention, les noms de fichiers commencent Kou sont Ssuivis d'un nombre à deux chiffres utilisé pour le séquencement et se terminant par le nom du script dans /etc/init.d.

Les liens peuvent être créés manuellement, mais sont généralement créés avec un script. Le script générique update-rc.dest disponible sur Ubuntu. La commande vous man update-rc.dfournira une documentation sur qui l'utiliser. Dans votre cas, essayez:

sudo update-rc.d css-servers defaults

Pour le démarrer à l'aide du script init, essayez:

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

Je démarre et arrête généralement le serveur de cette façon pour m'assurer que le script fonctionne comme souhaité. Ensuite, je cours update-rc.dpour l'ajouter aux /etc/rc.drépertoires de niveau d'exécution.

BillThor
la source
1

Si vous ne comprenez pas pourquoi votre service ne démarre pas au démarrage. Cependant, cela fonctionne correctement lorsque vous essayez de démarrer le service manuellement service <your service> start. Dans ce cas, essayez de rediriger la sortie standard et la sortie d'erreur vers un fichier. Ce qui peut vous donner une idée de pourquoi il ne démarre pas lors du démarrage du système.

par exemple à l'intérieur de votre script

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
la source