Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rapport contenu d'un fichier (cron)

    30 mai 2007 à 19:25:22

    Bonjour

    Je voulais savoir s'il existait un fichier qui indique si le contenu d'un fichier a été exécuté correctement ou s'il y a eu des erreurs (si il y en a eu, qu'il les affiche).

    Si il n'existe pas, comment savoir si le contenu du fichier a bien été exécuté (par exemple les sous programmes).

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      30 mai 2007 à 19:39:20

      Salut,

      Je ne suis pas sûr de comprendre ta question. De quel genre de fichiers parles-tu ? Des scripts shell ? Et quel est le rapport avec cron ?

      De manière générale, un programme a trois moyens de signaler des éventuels problèmes :
      - écrire des messages d'erreur sur la sortie d'erreur standard (où on peut les récupérer grâce aux redirections du shell) ;
      - écrire des messages d'erreur dans leur fichier de log (en principe, ce sont surtout les logiciels serveurs qui utilisent cette méthode) ;
      - renvoyer un code de retour non-nul (par convention), que l'on peut récupérer via le shell.

      Si tu précisais ta question, on pourrait t'aider davantage.
      • Partager sur Facebook
      • Partager sur Twitter
        30 mai 2007 à 19:52:37

        Oui ce sont des scripts shell.

        Des crons sont créés à une date donnée. Et je voudrais voir si les les fichiers appelés dans la crontab sont bien exécutés. En sachant que les lignes de la crontab sont exécutés avec la commande run-parts donc c'est un dossier entier qui est exécuté.

        Tu comprends mieux comme ca ?

        Pourrais tu m'eclaircir sur ces 2 methodes ? details, exemples stp

        - écrire des messages d'erreur sur la sortie d'erreur standard (où on peut les récupérer grâce aux redirections du shell) ;
        - renvoyer un code de retour non-nul (par convention), que l'on peut récupérer via le shell.
        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2007 à 22:10:39

          OK, pour des commandes exécutées depuis crontab, je pense que la meilleure solution est de rediriger la sortie standard des commandes vers le fichier de ton choix. Il te suffit d'ajouter > nom_du_fichier à la fin de la commande dans le crontab.

          Ça donnerait quelque chose comme ça :
          0 12 * * * run-parts dossier_à_exécuter > nom_du_fichier


          Tous les messages que tes scripts étaient censés afficher sur la console seront alors enregistrés dans le fichier indiqué.

          Quand au code de retour, c'est une valeur numérique que renvoie un programme lorsqu'il se termine et qui indique si tout s'est bien passé. Normalement, on peut récupérer cette valeur dans la variable $? du shell, mais dans le cas de commandes exécutées "indirectement" (par run-parts, lui-même exécuté par cron), ce n'est pas possible.
          • Partager sur Facebook
          • Partager sur Twitter
            31 mai 2007 à 10:11:55

            D'accord, mais je voudrais qu'il me retourne egalement les erreurs, par exemple si un rm n'a pas pu etre exécuté.

            Je sais qu'il y a ce symbole : &> mais il va me supprimer le contenu a chaque fois.
            Peut on mettre &>> ?

            0 12 * * * run-parts dossier_à_exécuter &> nom_du_fichier

            Et pour recuperer le rm, il me semble qu'il me le mettre de cette maniere :

            result = `rm ....`
            echo result

            ?
            • Partager sur Facebook
            • Partager sur Twitter
              31 mai 2007 à 12:07:03

              Si une commande ne peut s'exécuter normalement, tous les messages d'erreur qu'elle écrirait normalement sur la console seront écris dans le fichier où tu as redirigé la sortie.

              Il faut noter qu'avec run-parts, il n'est pas nécessaire de rediriger la sortie d'erreur standard (avec 2>), car run-parts se charge déjà de regidiriger la sortie d'erreur standard vers la sortie standard. Si tu veux t'en convaincre, tu peux étudier le code de run-parts, c'est un simple script shell.

              Donc pour récupérer la sortie de tous les scripts à exécuter, sans effacer les messages provenant d'une exécution précédente, il te suffit de faire
              0 12 * * * run-parts dossier_à_exécuter >> nom_du_fichier


              Le seul cas de figure où ce ne sera pas suffisants, c'est si tes scripts font appel à des commandes qui n'écrivent pas d'elle-même des messages d'erreur en cas de problème. Dans ce cas, tu dois adapter tes scripts au cas par cas. Souvent, il suffit d'ajouter l'option -v dans l'appel d'une commande pour l'inciter à être "bavarde" et à écrire des messages sur la console.

              Sinon, si tu as une commande qui n'écrit décidément rien du tout, tu peux récupérer son code de retour dans son script et afficher toi-même un message d'erreur si le code de retour est non-nul :
              commande_à_executer
              if [ ! $? -eq 0 ]; then
                  # Code de retour différent de 0
                  echo "commande_à_executer a échoué ! code de retour: $?"
              fi
              • Partager sur Facebook
              • Partager sur Twitter

              Rapport contenu d'un fichier (cron)

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown