Bienvenue sur la rubrique du Script de lancement pour la configuration de serveur de jeux sur linux (Ubuntu).
Elle a pour but de mieux optimiser vôtres machine et de l'automatiser le plus possible (Dans l'exemple je prends un serveur Counter Strike Global Offensive).

Sur la partie Programmation Shell je suis encore novice donc il existe peut être des méthodes plus appropriées et mieux optimisées


1. Le lancement automatique de programme


1.1 Le Cron ou Crontab

Sortons nos dicos et regardons ce que signifie le mot Cron ou Crontab "Def Wiki: Cron est un programme qui permet aux utilisateurs des systèmes Unix d'exécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiées à l'avance, ou selon un cycle défini à l'avance.".
Vous l'aurez donc compris Le cron sert à exécuter un script qui va relancer nos programmes comme nous le souhaitons.

Il servira principalement pour nos mises à jour des jeux ou tout simplement mettre à jour de façon automatique la machine à des heures programmées ou au redémarrage de la machine.

Voici un exemple

00 12 * * * /home/serveur/load.sh go_ffa


En gros je demande un redémarrage d'un serveur à midi tous les jours.
En détails :

    • 00 : C'est les minutes. Si une etoile est presente cela veux dire toutes les minutes.

    • 12 : C'est l'heure.

    • * : C'est le jour du mois (1 à 31)

    • * : C'est le mois (Janvier à decembre / 1 à 12)

    • * : C'est les jour de la semaine (0 à 7)

    • /home/serveur/load.sh : Notres cible ou commande

    • go_ffa : Option de lancement de notre cible.

Voici un deuxieme exemple

@reboot /home/serveur/load.sh go_ffa

Je demande à chaque demarrage de machine le lancement du serveur

Je vais vous faire un exemple d'automatisation


# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home

00 4 * * * /home/serveur/load.sh go_ffa
00 5 * * * /home/serveur/load.sh go_aim

@reboot /home/serveur/load.sh go_ffa_nm
@reboot /home/serveur/load.sh go_aim_nm

00 2 1 * * apt update
05 2 1 * * apt -y upgrade
30 2 1 * * reboot

Je demande à la machine de me faire grace à un script qui sera détaillé plus bas une mise jour journalière des serveurs FFA et Aim
à des heures différentes pour evité d'encombrer la bande passante et/ou le disque dur.

Sur l'exemple d'un serveur steam qui vérifie l'intégralité des fichiers avant la mise à jour, un jeu de 20Go avec une capacité du disque dur à traiter du 80Mo (60Mo en moyenne et selon les fichiers) prendra 5 minutes (environs)  donc plusieurs jeux en même temps double voir triple ce temps.

Il faut aussi savoir q'une fibre de 100Mb fais du 12Mo environs donc du 30 minutes pour 20Go et une machine standard (milieu de gamme) fais du 250Mb si vous avez de la chance donc 11 minutes pour 20Go

Je vous laisse faire le calcul cumulé si un jeu retélécharge tout lors d'une mise à jour donc à vous de prévoir le temps necessaire entre chaque serveur.

Après ses petits détails revenons à nos lignes.

Par la suite je demande un demarage automatique au lancement de la machine grace à @reboot qui peut survenir suite à des mises à jour.

En parallèle je demande une mise à jour complète de la machine avec un temps entre chaque commande (normalement on peut les aligner sur une seule heure et elle s'exécuterons les une après les autres automatiquement (00 2 1 * * apt update && apt -y upgrade && reboot)) puis un redémarage de celle-ci.

Bon rentrons maintenant dans les détails du cron

1.2 Comment l'exécuter


Il est simple d'automatiser tout ça mais deux petits trucs qui ont leurs importances...

Le fichier crontab et unique à chaque utilisateur donc il faudra faire en sorte d'être sur le bon utilisateur ou root.
Pour reprendre l'exemple ci-dessus les 4 premières commandes il faudra les rentrer sur l'utilisateur serveur où celui ou sont les programmes.
Les 3 dernières lignes en verte devront être rentrée en root grace au sudo su pour les appliquer au système lui même.

La seconde est qu'il faut impérativement les rentrer depuis putty grâce à un éditeur de texte comme nano.

Voici donc enfin la commande : crontab -e


2. Script de lancement multi serveur


je vais vous mettre un petit fichier maison ICI


Dans ce script, vous avez la possibilité de lancer plusieurs serveurs depuis un seul fichier avec des options que je vais détailler.

    • NAME1= Nom donée pour lancer le serveur (lors du lancement ./load.sh LE NOM)
    • CD1= Repertoire de l'executif
    • SCREEN_NAME1= Nom du screen
    • GAME_T1= Game type du serveur Cs GO
    • GAME_M1= Game mode du serveur Cs GO
    • SET_ACCOUNT1= Plus d'info ici
    • PLAYER1= Nombres max de joueurs
    • MAP1= Map de depart
    • PORT1= Port du serveur
    • IP1= Ip du serveur
    • TICKRATE1= Tickrate du serveur

Je crée des variables qui simplifie la config en personnalisant chaque option pour le lancer.
En option de lancement j'en propose 3.

Le démarrage ou le redémarrage avec mise à jour grâce au NAME1.
Exemple : ./load.sh go_ffa

Le démarrage ou le redémarrage sans mise à jour grâce au NAME1_nm.
Exemple : ./load.sh go_ffa_nm

L'arrêt complet et total du serveur et du screen.
Exemple : ./load.sh go_ffa_k

Il est configuré pour 2 serveurs mais il est possible d'en rajouter autant que vous le souhaitez.
Il faudra juste rééditer les variables et les cibler.

Je mets à disposition 2 autres fichiers pour 3 et 5 serveurs.
Il est possible de les cumuler mais sous d'autres noms pour les moins courageux (load_counter.sh load_tf.sh, ...).

Erreur des scripts :

- Il est possible qu'un .sh ne soit pas reconnus et met une erreur de ce style :
"-bash: ./load.sh: /bin/sh^M: bad interpreter: No such file or directory"
Crée le fichier depuis winscp ou la console resoudra le probléme

Ne pas oublié de mettre les droits d'exécutions sur le sh de lancement avec winscp ou :
chmod +x load.sh


Tout le contenu du site est edité par The DecAlpeur©.
Toutes les données sont soumises au droit d'auteur et peuvent être utilisées avec accord du propriétaire et citation de la source.
Je peux être contacté sur Steam ou TeamSpeak pour plus d'infos ou si vous détectez des incohérences.

The DecAlpeur

A esprit libre univers libre

- Création - Mapping -
Tutoriels Serveur Linux

Linux : Script de lancement

DecAlpeur Team Speak