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 :

CRON et Chemin relatif


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 242
    Par défaut CRON et Chemin relatif
    Bonjour à tous,

    Je sollicite votre aide pour passer mes chemins de mes scripts sh d'absolu à relatif dans mes fichiers CRON.

    Pourquoi ne pas les laisser en absolu ?
    Parce que nous avons plusieurs scripts CRON qui doivent etre actualises a chaque fois que nous changeons de machine/serveur.

    Le but est de definir dans notre .bashrc la valeur de ces variables communes appelées dans le CRON.


    Il semble que la definition dans le .bashrc ne soit pas la bonne decision car c'est user dependant.
    Ce que j'avais fait a la base
    partie cron 'mycron'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    # m h  dom mon dow   command
    00 13 * * * source /home/fripette/.bashrc
    01 13 * * * $FOLDER_SCRIPTS/suite_chemin/script.sh  > $FOLDER_SCRIPTS/tmp/test_cron.txt
    partie bashrc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    export FOLDER_SCRIPTS="/home/fripette/scripts"
    Cependant ceci ne marche pas.

    J'ai vu sur le net qu'on pouvait definir le $FOLDER_SCRIPTS dans le fichier /etc/contrab.
    Du coup mon fichier cron 'mycron' devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # m h  dom mon dow   command
    01 13 * * * $FOLDER_SCRIPTS/suite_chemin/script.sh  > $FOLDER_SCRIPTS/tmp/test_cron.txt
    De l'aide s'il vous plait.
    Merci beaucoup d'avance
    J'actualise mon CRON en faisant contrab mycron

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fripette Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    # m h  dom mon dow   command
    00 13 * * * source /home/fripette/.bashrc
    01 13 * * * $FOLDER_SCRIPTS/suite_chemin/script.sh  > $FOLDER_SCRIPTS/tmp/test_cron.txt
    Salut
    Cette façon de faire ne marchera pas car chaque commande est exécutée dans un processus différents. Donc quand le source est lancé, il source le processus fils mais pas le cron père...

    Citation Envoyé par fripette Voir le message
    J'ai vu sur le net qu'on pouvait definir le $FOLDER_SCRIPTS dans le fichier /etc/contrab.
    Du coup mon fichier cron 'mycron' devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # m h  dom mon dow   command
    01 13 * * * $FOLDER_SCRIPTS/suite_chemin/script.sh  > $FOLDER_SCRIPTS/tmp/test_cron.txt
    Ben oui mais où as-tu défini FOLDER_SCRIPTS ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FOLDER_SCRIPTS=/home/truc
     
    # m h  dom mon dow   command
    01 13 * * * $FOLDER_SCRIPTS/suite_chemin/script.sh  > $FOLDER_SCRIPTS/tmp/test_cron.txt
    Si elles sont suffisantes, tu peux aussi utiliser les variables habituelles de ton environnement que le cron connait aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # m h  dom mon dow   command
    01 13 * * * $HOME/suite_chemin/script.sh  > $HOME/tmp/test_cron.txt
    Toutefois cette façon de faire redevient du chemin absolu (ce que tu ne voulais pas faire au début). Sauf que ce chemin est paramétré. Mais tu peux aussi, si vraiment tu le veux, travailler en relatif. Faut simplement savoir que le cron, quand il se lance, se lance à partir du HOME de l'utilisateur qui l'a configuré. Donc te suffit de savoir où se trouve le script par rapport à ce HOME...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # m h  dom mon dow   command
    01 13 * * * ../../suite_chemin/script.sh  > ../../tmp/test_cron.txt
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 242
    Par défaut
    Citation:
    Envoyé par fripette
    J'ai vu sur le net qu'on pouvait definir le $FOLDER_SCRIPTS dans le fichier /etc/contrab.
    Du coup mon fichier cron 'mycron' devient
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3

    # m h dom mon dow command
    01 13 * * * $FOLDER_SCRIPTS/suite_chemin/script.sh > $FOLDER_SCRIPTS/tmp/test_cron.txt
    Ben oui mais où as-tu défini FOLDER_SCRIPTS ???
    J'ai defini la valeur dans /etc/crontab.
    De la meme maniere que j'avais defini dans le .bashrc.

    Si elles sont suffisantes, tu peux aussi utiliser les variables habituelles de ton environnement que le cron connait aussi
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # m h dom mon dow command
    01 13 * * * $HOME/suite_chemin/script.sh > $HOME/tmp/test_cron.txt
    Le $HOME de l'user qui lance le cron ne contient pas les scripts : nous avons dans l'equipe une organisation de ce type
    /home/users/fripette
    /home/users/user2
    /home/users/user3

    /scripts
    OR du au fait qu'il y ait du mouvements sur le bateau, le /scripts change souvent d'arborescence.
    D'où mon $FOLDER_SCRIPTS.

    DONC $HOME oui mais non , je voudrais juste faire ma propre variable pour la definir moi independamment d'un utilisateur (dans un monde utopique).

    FOLDER_SCRIPTS=/home/truc

    # m h dom mon dow command
    01 13 * * * $FOLDER_SCRIPTS/suite_chemin/script.sh > $FOLDER_SCRIPTS/tmp/test_cron.txt
    J'ai lu ca partout : est ce que je comprends bien ? Je définis une variable dans le même fichier CRON ?
    A quoi ça sert de faire une variable relative si après pour tout changement dans l'arborescence je dois re-ouvrir tous mes fichiers CRON ?
    Autant laisser tout en absolu !

    Je peux te dire la meme chose pour ta derniere solution.
    # m h dom mon dow command
    01 13 * * * ../../suite_chemin/script.sh > ../../tmp/test_cron.txt
    L'usage de la definition dans crontab n'est pas la bonne solution ?
    Comment faire en sorte que ma definition de var soit pris en compte lorsqu'il est dans le fichier /etc/crontab

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fripette Voir le message
    ... OR du au fait qu'il y ait du mouvements sur le bateau, le /scripts change souvent d'arborescence.
    Ah ? Il suit le mouvement des marées ???
    Votre organisation est à revoir. Un utilitaire n'a pas à changer d'emplacement tous les 4 matins au grès du vent. Il y a des emplacements spécifiques aux utilitaires locaux comme "/usr/local" ou (éventuellement) "/root".
    Il y a aussi des outils comme les liens symboliques pour différencier "emplacement logique" et "emplacement réel"...

    Citation Envoyé par fripette Voir le message
    Je peux te dire la meme chose pour ta derniere solution.
    Citation Envoyé par fripette Voir le message
    Je sollicite votre aide pour passer mes chemins de mes scripts sh d'absolu à relatif dans mes fichiers CRON.
    Ma dernière solution répond exactement à cette question à savoir "comment indiquer un chemin relatif dans le cron". Peut-être qu'au lieu de "chemin relatif" tu aurais dû parler de "chemin aléatoire". Dans ce cas évidemment la solution n'est pas du tout la même...

    Citation Envoyé par fripette Voir le message
    L'usage de la definition dans crontab n'est pas la bonne solution ?
    Comment faire en sorte que ma definition de var soit pris en compte lorsqu'il est dans le fichier /etc/crontab
    Le fichier "/etc/crontab" n'est pas l'équivalent de "/etc/profile". Le cron des utilisateurs n'hérite pas de l'environnement défini dans ce fichier...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre confirmé Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 242
    Par défaut
    Le fichier "/etc/crontab" n'est pas l'équivalent de "/etc/profile". Le cron des utilisateurs n'hérite pas de l'environnement défini dans ce fichier...
    C'est une réponse cruciale. Ce n'était pas une évidence pour moi.(ce qui est troublant c'est de quand meme pouvoir definir ce genre de variable dans ce fichier)

    Ah ? Il suit le mouvement des marées ???
    Votre organisation est à revoir. Un utilitaire n'a pas à changer d'emplacement tous les 4 matins au grès du vent. Il y a des emplacements spécifiques aux utilitaires locaux comme "/usr/local" ou (éventuellement) "/root".
    Il y a aussi des outils comme les liens symboliques pour différencier "emplacement logique" et "emplacement réel"...
    Je suis complètement d'accord avec toi et la stabilité du système en découle mais ...


    Ma dernière solution répond exactement à cette question à savoir "comment indiquer un chemin relatif dans le cron". Peut-être qu'au lieu de "chemin relatif" tu aurais dû parler de "chemin aléatoire". Dans ce cas évidemment la solution n'est pas du tout la même...
    Ce n'est pas un chemin aléatoire car il est stable jusqu'au changement de machine et donc de 'décision' d'emplacement .
    Avec du recul c'est un chemin qui est aléatoire mais qui est redéfini tous les 3-4 ans lors du changement de machine.
    Ce qui implique un lourd boulot de changement des chemins absolus de nos scripts CRON.
    D'où ma démarche pour rendre tout en relatif

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fripette Voir le message
    C'est une réponse cruciale. Ce n'était pas une évidence pour moi.
    Ni pour moi. Après plusieurs tests (qui ne donnaient rien) j'ai dû aller lire la doc de crontab pour trouver l'info...

    Citation Envoyé par fripette Voir le message
    (ce qui est troublant c'est de quand meme pouvoir definir ce genre de variable dans ce fichier)
    crontab ne sert qu'à root. Donc si on y met des variables alors le cron de root les prendra en compte.

    Citation Envoyé par fripette Voir le message
    Je suis complètement d'accord avec toi et la stabilité du système en découle mais ...
    .. mais tu as sûrement un pouvoir décisionnel dépendant de beaucoup de facteurs (dont ta compétence reconnue par ceux qui t'entourent) et tu peux faire remonter le problème.

    Citation Envoyé par fripette Voir le message
    Ce n'est pas un chemin aléatoire car il est stable jusqu'au changement de machine et donc de 'décision' d'emplacement .
    Avec du recul c'est un chemin qui est aléatoire mais qui est redéfini tous les 3-4 ans lors du changement de machine.
    Ce qui implique un lourd boulot de changement des chemins absolus de nos scripts CRON.
    D'où ma démarche pour rendre tout en relatif
    Oui mais tu cherches à rendre le cron relatif à une variable définie ailleurs que dans le fichier cron de l'utilisateur. Et ça ce n'est pas possible (le fichier cron ce n'est pas du script shell).
    Toutefois ce boulot (qui semble maintenant moins fréquentiel que ce que ton message initial laissait supposer) peut être automatisé dans un (autre) script. Ca c'est faisable et pas super difficile. Par exemple un truc comme ceci
    Code bash : 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
    #!/bin/bash
    old="\/chemin1\/script"
    new="\/chemin2\/script"
     
    # Boucle sur chaque fichier cron
    for file in /var/spool/cron/crontabs/*
    do
    	# On saute les (éventuels) non-fichiers ou fichiers vides
    	test ! -s "$file" && continue
     
    	# On saute les (éventuels) fichiers n'appartenant pas à un utilisateur réel
    	grep "^$file:" /etc/passwd 1>/dev/null || continue
     
    	# Création d'un canal associé au fichier
    	exec 3<"$file"
     
    	# Effacement du fichier (pour qu'il puisse être recréé depuis le canal)
    	rm -f "$file"
     
    	# Traitement du fichier (contenu dans le canal) et recréation du fichier
    	sed -e "s/$old/$new/g" 0<&3 >"$file"
     
    	# Les droits
    	chmod 600 "$file"
    	chown "$file" "$file"
    done
     
    # Redémarrage du cron
    /etc/init.d/crond restart
    Et hop, tous les 3-4 ans tu mets à jour les variables old et new par rapport au chemin et tu l'exécutes et basta le "lourd" boulot.
    Et si en plus, dans les cron des utilisateurs, le chemin du script est placé dans une variable spécifique, alors tu peux utiliser ce nom de variable pour renforcer mon petit bout de code pour être certain qu'il ne modifie que le chemin du script (et pas accidentellement un autre chemin similaire)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Raccourci Chemin relatif pour la cible
    Par rabobsky dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 07/11/2005, 13h57
  2. Prb de chemin relatif
    Par hitchie dans le forum MFC
    Réponses: 4
    Dernier message: 10/05/2005, 15h46
  3. [Plugin Tomcat] Chemin relatif
    Par cloogy dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 01/03/2005, 16h26
  4. [XSL-FO] Chemin relatif d'une image
    Par JustAGphy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/08/2004, 13h25
  5. [JSP] Include, problème de chemin relatif
    Par dafly dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/04/2004, 14h11

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