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?
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
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.
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