Problème cron

Bonjour,

J’ai actuellement un serveur de jeu qui s’exécute via la commande ./monexecutable et il se trouve dans le dossier /data/gameservers/dossier1/ .

Je souhaite automatiser le redémarrage automatique de mon serveur à 0h 4h 8h 12h 16h 20h.

Ce serveur de jeu tourne dans un screen nommé “screenJeu”.

J’ai donc mis cette ligne grâce à la commande crontab -e:

0 0,4,8,12,16,20 * * * /data/gameservers/dossier1/./restart.sh

Voici le contenu de mon restart.sh:

#!/bin/bash started=`date +%D\ %T` echo "$started REDEMARRAGE " > logfile.txt sleep 2 screen -S screenJeu -p 0 -X quit sleep 3 screen -S screenJeu ./monexecutable

Le serveur se ferme bien (le screen est tué), mais il ne redémarre pas. Je ne vois pas du tout ce qui bloque…

Pensez-vous que cela viens de mon serveur de jeu OU du screen que je créer ?

Merci d’avance !

EDIT: le screen n’est même pas créé.

Salut, est-ce que ton script exécuté en standalone fonctionne ?

Bonsoir,

Oui.
J’ai testé en modifiant le chemin du script en mettant directement /data/gameservers/mondossier, mais toujours rien, aucun screen de créé, même en mettant screen -S TESTS

dans cron, l’environnement est MINIMAL.

par exemple, $PATH n’est pas défini, ni $HOME.

Il conviens donc, soit de définir PATH home et consors, soit d’utiliser exclusivement des chemin absolus.
(/bin/ls est un chemin absolu, ./ls est un chemin relatif)

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

Il faut aussi noter que cron execute les commandes depuis le répertoire “/”. Vous vous attendez a ce qu’il les execute dans le répertoire /data/gameservers/dossier1/. Il faut donc faire un cd /data/gameservers/dossier1/ au tout début du script.

/data/gameservers/dossier1/./blabla le “./” est superflu:

sous unix (et sous dos, windows, mac) le répertoire “.” correspond au répertoire courant. Dans le cas ou on spécifie /data/gameservers/dossiers1/./ cela est strictement équivalent à dire je suis dans /data/gameservers/dossiers1/ (vous pouvez vérifier avec readlink -f /./data/./gamerservers/./././dossiers1/./././ par exemple)

Bonsoir,

Merci pour les conseils, j’ai appliqué mais c’est toujours pareil.
Pour rappel: le cron lui même s’exécute bien, mais le screen ne veut pas se créer.

Voici mon script:

#!/bin/bash
started=`date +%D\ %T`
echo "$started server restart script triggered" > logfile.txt
sleep 2
/usr/bin/screen -S NomScreen -p 0 -X quit
sleep 3
cd /data/gameservers/dossier1/
/usr/bin/screen -S NomScreen /data/gameservers/dossier1/executable

EDIT: réglé, il fallait mettre -d -m en tant que paramètres sur Screen. >< !