IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

fichier shell qui ne fonctionne pas avec le cron mais fonctionne dans le shell


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut fichier shell qui ne fonctionne pas avec le cron mais fonctionne dans le shell
    Bonjour j'ai un fichier shell : /usr/local/sbin/S3DServer_script start & qui fonctionne quand je le lance dans le Shell mais ne fonctionne pas avec le cron.

    (je lance d'autre fichiers avec le crontab qui fonctionnent donc le cron est bien paramètré je pense.)

    dans mon fichier shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    start)
    		if [ -e $S3DServerLife ]; then
    			echo "S3DServer Advanced 1.5.1 for Linux seems to be running";
    			echo "If you are sure the server is not running, delete $S3DServerLife"
    			exit 1
    		else
    			echo "Starting S3DServer Advanced 1.5.1 for Linux"
    			if [ -e S3DServer-1.5.1-Advanced-Linux ]; then
    				if [ ! -x S3DServer-1.5.1-Advanced-Linux ]; then
    					echo "S3DServer-1.5.1-Advanced-Linux is not executable, trying to set it"
    					chmod u+x S3DServer-1.5.1-Advanced-Linux
    				fi
    				if [ -x S3DServer-1.5.1-Advanced-Linux ]; then
    					./S3DServer-1.5.1-Advanced-Linux &
                        for c in $(seq 1 300); do
                            if [ ! -e $S3DServerLife ]; then
                                echo -n "."
                                sleep 1
                            else
                                echo "done"
                                break
                            fi
                        done
    				else
    					echo "S3DServer-1.5.1-Advanced-Linux is not executable, fix this"
    					exit 4
    				fi
    			else
    				echo "Couldnt find S3DServer-1.5.1-Advanced-Linux"
    				exit 5
    			fi
    		fi
    	;;


    dans le crontab -e je fais :
    # m h dom mon dow command
    * * * * * /usr/local/sbin/S3DServer_script start & 2>&1 > /root/cmd.log

  2. #2
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Bonjour,

    Que veut dire "[...] ne fonctionne pas avec le cron"? Est-ce que le script n'est pas exécuté ou bien est-ce qu'il est exécuté mais ne donne pas le résultat escompté?

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    Justement je ne sais pas, lorque j'exécute des scripts php avec le cron : ils fonctionnent et j'ai le bon résultat.

    mais avec un fichier sans extension (code shell) il n'y a rien écrit dans les log et je n'ai pas le résultat escompté.

    Faut il une commande spéciale pour lancer un fichier sans extension dans le cron (car avec php cela fonctionne correctement)


    là j'ai juste fait un # m h dom mon dow command
    * * * * * /usr/local/sbin/S3DServer_script start & 2>&1 > /root/cmd.log

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Les scripts posés dans une crontab se doivent d'utiliser des chemins absolus. Or dans ton script, on lit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./S3DServer-1.5.1-Advanced-Linux &
    Essaye de mettre le chemin absolu, puis de le mettre dans la crontab (crontab -e), puis regardes les logs de celle-ci (généralement /var/log/cron)

  5. #5
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Bonsoir,

    Comme le dit fort justement Gangsoleil, aucune hypothèse ne doit être posée lors de l'exécution du script par le service cron:
    * Pas de variable spéciale déclarée.
    * On est généralement dans le home dir.
    Il faudrait donc déclarer une variable genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    serveur="/usr/.../S3DServer-1.5.1-Advanced-Linux"
    ...
    if [ -e $serveur ]
    then
        ...
    puis utiliser cette variable pour remplacer toutes les références directes au nom du programme. C'est mieux s'il faut un jour changer le nom ou l'emplacement dudit programme.

    Pour être bien sûr que le script est appelé, ajoute au début (juste après le start) quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "diabli73 was here" > /tmp/delete.me
    et regarde si le fichier /tmp/delete.me est créé ou non.

    Et puis le lancement depuis le cron me paraît compliquée. Est-ce que la ligne suivante ne te convient pas mieux (à vérifier quand même)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * /usr/local/sbin/S3DServer_script start &> /root/cmd.log &
    J'imagine que c'est un test, parce que cette ligne du cron est exécutée toutes les minutes!

    Enfin, fais attention à l'indentation: une partie du code utilise la tabulation et une autre l'espace. Faut choisir dans la vie, soit l'un soit l'autre.

Discussions similaires

  1. [PrestaShop] Module "Relancer vos clients" ne fonctionne pas avec tâche CRON
    Par IED factory dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 20/05/2015, 14h48
  2. [XL-2003] Macro qui ne Fonctionne PAS sur Excel 2003 mais Fonctionne sur Excel 2010
    Par CedResma34 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/01/2014, 11h05
  3. [WD-2007] Publipostage qui ne fonctionne pas avec un fichier source lié
    Par paulinegue dans le forum VBA Word
    Réponses: 6
    Dernier message: 09/08/2011, 10h47
  4. Réponses: 6
    Dernier message: 20/05/2010, 12h34
  5. Liens ne fonctionnent pas avec monsite.com mais avec www.monsite.com
    Par mickey83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 24/04/2010, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo