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 et boucle for


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 238
    Par défaut Crontab et boucle for
    Bonjour à tous,

    je pense être dans le bon forum.

    Voici mon soucis.
    J'ai écris un script en bash pur faire une sauvegarde d'une partie de mes documents.
    Le script doit aussi vérifier si il existe deja des backup et à quelle date.
    Comme je compte faire un backup journalier, si des backup plus vieux de quatre jours existent, on les suppriment.

    Le backup et l'effacement fonctionne parfaitement lorsque je les lancent depuis un terminal.

    Je crée dons un cron qui lance le script tous les jours.

    Le backup se fait bien, mais la boucle qui vérifie si les anciens fichiers ont plus de quatre jour ne passe pas ....
    J'ai mis des commande de sortie vers un fichier log, et effectivement le script qui doit vérifier/effacer les fichiers demarre bien,
    mais la boucle (for fich in "$REP"*) ne passe pas.

    Le meme scrript dans le terminal fonctionne impeccablement.
    le cron est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #***   Sauvegarde tous le jour à 09:00 et effacement des Bck
    51 10 * * * /home/michel/Documents/bash/sauvegarde.sh -b
    manque -t-il quelque chose dans la ligne du CRON, ?

    Merci de votre aide

    Michel

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 448
    Par défaut
    Bonjour,

    J'ai envie de dire qu'il manque l'user, mais je sais pas par défaut qu'elle user est utilisé par la cron (si c'est root ou un autre).

    Spécifie l'user.

    Et tu entends quoi par la boucle ne passe pas ? C'est pas très clair ? $REP est vide ? Erreur ?

    Dans quel cas ton "-b" est nécessaire ?

    Cdt

  3. #3
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 238
    Par défaut
    Il manque le USER ?? ou cela?

    Spécifier l'user dans le cron ?

    Mes fichier script sont autoriser pour le proprio (moi) et mon groupe.
    Le cron est lancé pour le user (je crois donc moi)

    Pour détailler un peux plus,
    j'ai un script (sauvegarde.sh) qui lorsque le premier argument est "-b", la sauvegarde se fait, création d"un fichier *.tar. Avec d'autre options, on a une liste, ou des test.

    Ce script, avant de créer le fichier *.tar, démarre un autre script (Effbck.sh) ui parcour le répertoire des backup, et si il trouve des fichier plus vieux que 4 jours, il les efface;

    Depuis un terminal, tous se passe bien (le user est moi evidement)
    Depuis CRON, le premier script est exécuté, l'appel au second se fait aussi, mais dans ce second script( Effbck.sh), la boucle servant à parcourir les fichiers du répertoire ne s"effectue pas. Hors, je suis sur que le script démarre, car le fichier log en atteste. Mais il ne parcours pas le répertoire....

    Je n'ai pas d'erreur lors de l"xecution.

    Michel

  4. #4
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 238
    Par défaut user dans crontab
    Voila, j'ai modifier la commande de crontab,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #***   Sauvegarde tous le jour à 09:00 et effacement des Bck
    19 12 * * * michel /home/michel/Documents/bash/sauvegarde.sh -b
    mais alors plus rien ne fonctionne.

    j'&i remis la ligne "normale":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #***   Sauvegarde tous le jour à 09:00 et effacement des Bck
    26 12 * * *  /home/michel/Documents/bash/sauvegarde.sh -b
    et le script fonctionne , mais toujours pas la boucle de parcours du répertoire...
    Y doit y avoir autre chose, mais quoi????

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2022
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2022
    Messages : 448
    Par défaut
    Plus rien ne fonctionne ? Ca manque en détail ? Problème de droit , surement ca


    Je redemande, à quoi sert l'option -b ?

  6. #6
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 238
    Par défaut
    L'option -b, donne l'information pour crée le fichier backup (*.tar) au script.
    Si l'argument -b n'est pas présent, la création du fichier ne se fera pas.

    michel

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 422
    Par défaut
    Alors, on rajoute l'user que si on modifie le fichier crontab system qui se trouve généralement dans /etc/crontab, si c'est un user qui crée sa propre crontab (ce qui est le cas ici), pas besoin...

    Sinon, peux tu nous donner la première ligne de ton script ?

    Il faut savoir, que dans une crontab, il faut définir ta variable PATH ou alors appeler les commande avec le chemin en absolu.

    Donne nous aussi au moins la boucle en question.

  8. #8
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 238
    Par défaut
    Je n'ai rien modifier comme /etc/crontab.....

    j'ai donc deux script, sauvegarde.sh qui se charge de créer un fichier .tar.
    Ce script, lance aussi le script Effbaskup.sh qui lui vérifie si un fichier plus vieux de 4 jours existe, alors il l'efface.
    Cela marche très bien depuis un terminal, mais pas depuis cron...

    Les première lignes des scripts:
    Ensuite les variables, puis le "code"
    Tous les chemin des log et des fichiers sont en absolus.
    /home/michel/.......
    J'ai fait un petit fichier test.sh qui ne sert que à appeler le script Effbackup.sh et depuis ce script, cela fonctionne (sauf avec cron.)

    pendant que j'écrivais ce texte, je fais des test et après avoir effacer des variables en doubles (dans les deux scripts), remis le shebang en tête de fichier, cela fonctionne, a savoir que la boucle qui lit les fichiers s'exécute.....

    un problèmes de variables??

    En effet, après avoir travailler sur les scripts avec Visual code, un jeu ne s'éxecutait plus sur le pc, il fallait que je deconnecte et reconnecte le user pour que le jeu refonctionne.... (ceal n'a sans doute rien à voir, mais là quand même c'est curieux.

    Bref, je fais encore des tests, mais il semble que cela fonctionne.....

    michel
    Je laisse le post ouvert jusque demain si le problème revient

  9. #9
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 238
    Par défaut Le problème et sa solution....
    Bon alors voila.....

    Le problème est très simple..... le
    #! /bin/bash
    Doit être imprétivement la première ligne merci à disedorgue qui m'a donné la clé de la solution.

    En effet, comme dans tous mes autre programme, je décris (pour la postérité) le pourquoi et le comment du programme.
    Si en C, python, etc.. on met les commentaire ou l'on veut, en bash cela pose un problème.....

    En effet, si je met un commentaire avant le shebang, la boucle de parcourt des fichier ne fonctionne pas avec le cron. Alors qu'elle fonctionne très bien depuis un terminal.....

    J'ai refait les test avec le shebang sur la première ligne ou pas, le comportement évolue en fonction de la position du shebang.

    Merci pour l'aide apportée à mon problèmes

    Michel

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 730
    Par défaut
    si tu ne mets pas de shebang adapté sur la première ligne d'un script python, c'est le shell courant qui va tenter de l'exécuter.

  11. #11
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 238
    Par défaut
    En tout cas, dans mes pense-bête , l'importance de la place du shebang est mis en gras et en couleur

    encore merci

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 17h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 11h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 20h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 23h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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