web-dev-qa-db-fra.com

Le script init.d ne fonctionne pas au démarrage

J'héberge des serveurs de jeux Counter-Strike sur mon serveur dédié en utilisant screen. J'ai ce script que je lance quand 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) dans /etc/init.d/ et, à ma connaissance, cela signifie qu'il est exécuté lors du démarrage du système. Cependant, lorsque je vérifie les écrans actifs à l'aide de screen -ls, aucun n'est en cours d'exécution.

Comment puis-je les faire fonctionner au démarrage sous Ubuntu Server?

15
Mark Twaign

Avoir le script présent dans /etc/init.d n'est pas suffisant pour le lancer au démarrage.

Pour l'ajouter à votre démarrage, vous devez en parler à Ubuntu:

Sudo update-rc.d css-servers defaults

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

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

Sudo service css-servers start
30
Michael Hampton

Vous avez fait la première partie. /etc/init.d est l'endroit où 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 dans les répertoires /etc/rc*.d. Chaque niveau d'exécution a son propre répertoire. Les scripts dont le nom de lien commence par K sont exécutés avec le paramètre d'arrêt, et ceux dont le nom commence par S sont exécutés avec le paramètre start. Par convention, les noms de fichier commencent par K ou S, suivis d'un numéro à deux chiffres utilisé pour le séquencement, et se terminent 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.d est disponible sur Ubuntu. La commande man update-rc.d vous indiquera qui l’utiliser. Dans votre cas, essayez:

Sudo update-rc.d css-servers defaults

Pour le démarrer en utilisant le script init, essayez:

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

En règle générale, je démarre et arrête le serveur de cette façon pour que le script fonctionne comme vous le souhaitez. Ensuite, je lance update-rc.d pour l'ajouter aux répertoires /etc/rc.d runlevel.

7
BillThor

Si vous ne comprenez pas pourquoi votre service ne démarre pas au démarrage. Cependant, il se lance parfaitement si vous essayez de le démarrer pendant que vous essayez manuellement d’exécuter la commande service <your service> start. Ensuite, essayez de rediriger la sortie standard et la sortie d'erreur vers un fichier. Ce qui peut vous donner une idée de la raison pour laquelle cela ne démarre pas

par exemple. dans 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
0
Pandurang Patil