Forum Linux.général crontab avec un script

Posté par  .
Étiquettes :
0
4
avr.
2007
Bonjour

Nous avons mis en place un serveur LDAP sur une fedora core 3.Je voudrais faire un crontab pour pouvoir journaliser les fichiers de logs (loglevel 256) voici le contenu de mon crontab:

59 23 * * * /root/cron_log_ldap.cmd 2>/root/erreur_cron 1>/root/good_cron


et le contenu de mon script:

DATE=$(date +%x)
/bin/mv /var/log/ldap.log /var/log/ldap.log${DATE}
/sbin/service syslog restart
/sbin/service ldap restart

Quand je lance mon script a la main en root (su -) tous ce passe bien mais par contre quand c'est une execution par le crontab il ne veut pas me faire le mv.L'erreur dans le erreur_cron est No such file or directory .

J'ai cherché dans google mais sans succés j'ai voulu modifié /etc/syslog.conf pour que le fichier ldap.log ce crée dans /root mais là encore echec (le fichier ldap.conf ne se créé pas du tout), j'ai essayé avec cat ldap.log > ldap.log${DATE} meme chose.
Les droits sur /var/log sont 775 avec root en proprio.

Si quelqu'un pouvait me donner de nouvelles pistes
  • # .

    Posté par  . Évalué à 1.

    Essaies avec en haut du script :

    #!/bin/bash

    et puis aussi explicite le path, car j'ai remarqué que les scripts executés par le cron n'ont pas le même path que ceux executés en console :

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

    ou un truc du genre
    • [^] # Re: .

      Posté par  . Évalué à 1.

      salut ultima

      J'avais deja essayé en changant #!/bin/sh par #!/bin/bash,J'ai oublié de le signaler et pour le PATH est ce que ca à de l'importance vu que tous mes chemins sont en absolu ??

      j'ai quand meme essayé on sait jamais j'ai mis
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      directement dans le crontab (j'ai deja SHELL MAILTO) et j'ai rajouté ta ligne dans mon script mais meme resultat le mv ne veut pas passer.
      Par contre quand je fais un crontab du style:

      00 14 * * * mv /root/test /root/test1

      là ca fonctionne donc je penchais plutot pour un probleme de droit mais pour moi il sont bon.Est ce qu'il n'y aurait pas un problème avec un fichier en cour d'utilisation vu que ce fichier est renseigné continuellement par slpad.Dans ce cas il faudrait peut etre que j'arrete d'abord le demon ldap puis que je fasse mon mv.Mais alors pourquoi le script fonctonne en mode console
  • # Clownerie inside ?

    Posté par  . Évalué à 2.

    Hello !
    Je vais peut-être dire une clownerie plus grosse encore que moi, mais tu as renseigné la crontab de quel utilisateur ?
    Celle de root, celle de ton user, celle du système ?
    Parce que dans certains cas, le script n'est pas lancé par root, et il se peut que l'utilisateur au mon duquel cron lance le script n'ait pas les droits suffisants sur le fichier que tu veux déplacer, ou tout du moins sur l'arborescence qui y mène.
    Peut-être une piste, peut-être une clownerie, mais ça mérite peut être soit d'être explicité (car ton message n'est pas très clair sur ce point), soit d'être vérifé...
    En espérant que ça aide, comme on dit...
    • [^] # Re: Clownerie inside ?

      Posté par  . Évalué à 1.

      salut Gyro Gearllose

      Tu as raison je ne l'ai pas dit clairement mais ma crontab est enregistré avec l'utilisateur root.
      su -
      crontab -e
  • # date +%x ?

    Posté par  (site web personnel) . Évalué à 5.

    Je suis surpris que ton script fonctionne correctement quand tu le lances à la main.

    Chez moi, la commande « date +%x » me retourne ceci :
    [10:05] atihon@armida:~$ date +%x
    04/04/07


    Autrement dit, ton mv fait en réalité quelque chose comme ça :
    mv /var/log/ldap.log /var/log/ldap.log04/04/07

    Comme le répertoire de destination (/var/log/ldap.log04/04) n'existe pas, le message d'erreur de mv est bien correct.

    Ce que je choisis habituellement comme format de date pour ce genre d'opération, c'est plutôt ceci :
    DATE=$(date +%Y%m%d)

    Ainsi, pas d'ennui de caractère « / » et en plus les fichiers sont facilement classables par date.
    • [^] # Re: date +%x ?

      Posté par  . Évalué à 1.

      salut Amand Tihon

      Quand je lance le script a la main j'ai des retour du type:
      ldap.log02.04.2007 donc je n'est pas le probleme du /. Je ne sais pas pourquoi chez moi date +%x met des points et non des / peut etre parce que je suis sous fedora.

      J'ai quand meme essayé avec ton formatage de la date et oh miracle ca marche alors je sais pas pourquoi il ne voulais pas faire ca:
      mv /var/log/ldap.log /var/log/ldap.log02.04.2007

      et qu'il veut bien faire:
      mv /var/log/ldap.log /var/log/ldap.log20070404

      Sans doute un probleme avec les points et crontab mais bon je vois pas.
      Si quelqu'un a la reponce je suis preneur

      En tout cas merci à toi.
      • [^] # Re: date +%x ?

        Posté par  . Évalué à 2.

        C'est une mandriva non ?
        j'avais déjà remarqué un truc du genre.
        c'est sans doute a cause des locales..
        mais en effet, mandriva internationalise la sortie de quelques commande (c'est pas un reproche hein) a l'aide des locales (ca dois être definie dans un quelconque .bashrc o uautre)
        mais des lors que ton script se lance en dehors d'une session... fini l'internationalisation...

        enfin, je dis ca... c'est ce que je suppose.
        a+
    • [^] # Re: date +%x ?

      Posté par  . Évalué à 4.

      Salut,

      Bravo à Armand : je plussoie et j'applaudis. La question de sebj me dérangeait depuis que je l'avais lue...

      Et le pire, c'est que j'ai déjà eu le même type de problème avec cron.
      En fait, la sortie de "date +%x" dépend de la locale courante. cf le man de date :
      %x représentation de la date conforme aux paramètres régionaux

      Donc, quand sebj essaie en intéractif, avec une locale du type fr_FR, il obtient quelque chose du genre 04.04.07, alors que dans un cron (pas de locale fixée, donc "C" par défaut), "date +%x" renvoie 04/04/07.

      Moralité : dans un cron il faut éviter les commandes dont la sortie dépend de la locale (ou alors bien fixer la locale voulue).

      A+
      JJD
      • [^] # Re: date +%x ?

        Posté par  . Évalué à 1.

        salut à tous

        En effet sur ma distribution %+x représente la locale de la date donc c'est pour ca que cela ne passait dans le cron.C'est quelque chose que je ne savais pas.

        Merci à tous pour vos reponces rapide.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.