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 :

Crontab à plusieurs actions - Petit problème


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut Crontab à plusieurs actions - Petit problème
    Bonjour à tous !

    J'espère que mon post est au bon endroit...

    Voici mon problème. Je veux exécuter une tâche multiple avec crontab. Le but est de faire exécuter la tâche au 5 minutes.

    Mon crantab ressemble à ça :

    */1 * * * * root /etc/init.d/dovecot status > /etc/test && read result < /etc/test && [$result eq "dovecot dead but subsys locked"] && rm -f /var/lock/subsys/dovecot && /etc/init.d/dovecot restart

    Il s'agit d,une tâche temporaire qui détecte si dovecot est mort. J' ai un problème avec dovecot et en attendant de le régler, j'ai besoin qu'il vérifi le status du service, lorsque le status = dovecot dead but subsys locked alors je supprime le fichier dovecot situé dans /var/lock... et je redémarre dovecot.

    Présentement, je ne sais pas si ma ligne de commande est exact, car je ne peux pas la tester puisque rien ne fonctionne... J'ai essayer de faire une commande simple comme :

    */1 * * * * root /etc/init.d/dovecot status && /etc/init.d/dovecot start

    Mais le deuxième argument ne fonctionne pas alors...

    J'espère que quelqu'un pourra m'éclairer et m'aider à résoudre ce problème .

    Je suis présentement au boulot et je quitte dans 30 minutes pour la fin de semaine et serai de retour Lundi pour lire vos réponses.

    Un gros merci à vous tous !

  2. #2
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Le plus simple si ta ligne de commande fonctionne en shell mais pas en cron, c'est de faire un script shell dans lequel tu placerais ta commande, et de faire s'executer ton script en cron.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CRON :
    */1 * * * * root /root/verify_dovecot.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    verify_dovecot.sh
    #!/bin/sh
     
    /etc/init.d/dovecot status > /etc/test
    read result < /etc/test 
    if [ $result = "dovecot dead but subsys locked" ]
    then
    rm -f /var/lock/subsys/dovecot && /etc/init.d/dovecot restart
    fi
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut
    Merci beaucoup, ta solution est beaucoup mieux que la mienne et surtout plus propre

    Il y a cependant un petit problème lorsque la ligne READ s'exécute. On dirait que la variable "result" ne prend en compte que le premier mot de la phrase contenu dans mon fichier.

    Je reçois un erreur '' /etc/AnnieScripts/verify_dovecot.sh: line 7: [dovecot: command not found ''

    La ligne 7 est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [$result = "dovecot dead but subsys locked"]
    et dans mon fichier test j'ai aussi cette phrase. Selon l'erreur affiché, on dirait que $result ne contient que le premier mot du fichier, soit dovecot.

    Note : Je reçois cet erreur seulement si les balises [...] de mon if ne contiennent aucun espace. Si je mets un espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ $result = "dovecot dead but subsys locked" ]
    C'est cet erreur que je reçois :

    '' /etc/AnnieScripts/verify_dovecot.sh: line 7: [: too many argument ''

    merci

  4. #4
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Oops, en effet, j'ai fait un petit oubli de guillemets, sorry !
    Voila :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    verify_dovecot.sh
    #!/bin/sh
     
    /etc/init.d/dovecot status > /etc/test
    read result < /etc/test 
    if [ "$result" = "dovecot dead but subsys locked" ]
    then
    rm -f /var/lock/subsys/dovecot && /etc/init.d/dovecot restart
    fi
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Par défaut
    CA FONCTIONNE!!! Merci beaucoup

    C'est drôle, mais les espaces entre les balises sont important. Si on ne les met pas, alors ça ne fonctionne pas.

    Par curiosité, tu m'as fait mettre la variable entre guillemet. Est-ce la façon de déclarer une variable String?

    Merci et bonne journée

    Je vais mettre ce post RÉSOLU héhé

  6. #6
    Rédacteur
    Avatar de lavazavio
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 673
    Par défaut
    Oui, quand la variable est une chaine de caractère (les puristes me diront que c'est toujours une chaine de caractère... bref), il est important de la mettre entre guillemets car le shell interprete son contenu tel quel.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    si $var = bonjour le monde
    le shell va interpreter comme suit :
     
    $var <-> bonjour => le shell récupere uniquement le 1er terme et donc renvoie une erreur car il n'arrive pas a interpreter les termes "le" et "monde".
     
    "$var" <-> bonjour le monde
    Rédacteur et Modérateur rubriques Linux et Virtualisation
    Mes Articles
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
    N'oubliez pas de consulter les FAQ virtualisation et les cours et tutoriels Virtualisation
    Man pages en français

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

Discussions similaires

  1. [Exchange 2007] Plusieurs petits problèmes
    Par ziseb dans le forum Exchange Server
    Réponses: 0
    Dernier message: 26/10/2009, 11h34
  2. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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