Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/02/2013, à 22:52

BOOMER29

besoin d'aide avec crontab avec le terminal

Bonjour tout le monde, je suis nouveau et après avoir parcouru ce site très intéressant je me suis dis qu'il serait temps de m'inscrire pour apprendre plus de choses !

Je rencontre donc quelques soucis dans la réalisation d'un exercice et je fais appel à vos connaissances car je bloque.

L'objectif est de sauver périodiquement une base de données dans un fichier de requêtes SQL. sous un dossier nommé "/backup1".

Pour ce faire je doit tout d'abord crée 3 répertoires "chose que j'ai déjà fait en me mettant en root" j'ai fait mkdir suivis du nom du répetoire.
donc a la fin j'obtiens les 3 répertoires voulu: /backup puis /backup1 et enfin /backup2


Jusque là pas de problème.

Ensuite il me faut écrire un script qui sauve la base de données "que j'ai préalablement crée et qui s'appel commerce" dans un fichier de requêtes SQL.

tous mes scripts doivent aller dans le dossier /backup.

Le nom du fichier de sauvegarde produit devra avoir la forme suivante: /backup1/commerce<AAAAMMJJ>.sql qui correspont à la date de la sauvegarde.

Il faut écrire une ligne à transmettre à crontab pour programmer cette sauvegarde du lundi au vendredi à 22h. ensuite il est conseillé d'utiliser des fonctions mais là je patauge....


voilà pour le sujet:
Ce que j'ai déjà fais et qui fonctionne:

-J'ai crée les 3 dossiers: /backup, /backup1, /backup2
-j'ai crée un fichier nommé "backup.sh" qui contient mon script de sauvegarde et qui se trouve dans le dossier backup car tous les script doivent aller dans le dossier "/backup".
-Le script de sauvegarde de ma base de données sql qui se trouve dans le fichier "backup.sh" est le suivant:
le lance nano backup.sh et j'écris:

mysqldump -A -u root >/backup1/commerce`date +%Y%m%d`.sql (il est fonctionnel enfin la je le fait de tête mais en vrai il marche.

une fois mon script écris dans nano j'enregiste le fichier et je le rend exécutable avec la commande  chmod +x backup.sh

après j'éssaie pour voir si la sauvegarde de ma base commerce se fait bien dans le format AAAAMMJJ en executant mon fichier: ./backup.sh.

Je vais voir dans le dossier backup1 et hop je vois mon fichier commerce20130201.sql donc jusque là c'est ok.


maintenant comment faire avec crontab pour que celà s'éxcute du lundi au vendredi à 22h ???

j'ai vu des codes du genre: 59 11 * * 1,2,3,4,5 /backup.sh à taper dans le terminal je suppose ??? mais est-ce bien celà ? en plus il y a aussi la possiblité d'utliser des fonctions mais comment faire?

J'ai vraiment besoin de votre aide svp d'autant plus que j'ai encore d'autres exos à faire ...sur le même principe

Je vous remercie par avance
Cordialement

Dernière modification par BOOMER29 (Le 01/02/2013, à 22:55)

Hors ligne

#2 Le 01/02/2013, à 23:43

cervo

Re : besoin d'aide avec crontab avec le terminal

Si ton script appartient au user root :

dans un terminal :

sudo crontab -e

ça t'ouvrira un editeur par défaut (vi et nano je pense)
et ensuite

0 22 * * 0-5 chemin/du/script

Pour le 0-5 je suis pas sur, ça dépend si le 0 correspond au dimanche ou au lundi, je ne sais plus.
Plus d'info ici : http://doc.ubuntu-fr.org/cron

Dernière modification par cervo (Le 01/02/2013, à 23:44)

Hors ligne

#3 Le 02/02/2013, à 10:36

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Bonjour cervo

merci beaucoup, je vais éssayé celà smile .

Je pense que j'aurai encore besoin d'aide pour les autres exos car j'ai l'impression qu' ils sont plus difficile....:/

Hors ligne

#4 Le 02/02/2013, à 11:47

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Voilà j'ai fais des tests et celà fonctionne parfaitement smile
pour mes tests j'ai mis 15 11 * * 6 /backup/backup.sh pour que la sauvegarde se lance automatiquement aujourd'hui à 11h15. et ça à fonctionner !

sinon pour votre réponse il à fallu que je modifie en mettant 0 22 * * 1-5 /backup/backup.sh car 0-5  correspond au dimanche dans ce cas.

ouf cet exo est fonctionnel et j'ai compris le fonctionnement de crontab merci beaucoup pour votre aide smile

Bon c'est pas fini tongue la je dois archiver les fichiers de sauvegarde crées "pour rappel la sauvegarde va du lundi au vendredi et ce fait à 22h00" .

Je dois crée un script donc dans un fichier que j'ai nommé exo2.sh qui se trouve toujours dans mon dossier principal qui doit contenir tous les script et qui s'appel /backup.

Pour le moment ce fichier exo2.sh est crée.

mais je ne sais pas quoi mettre dedans ?

l'action du script doit ajouter le contenu du répertoire /backup1 "où il y a toutes mes sauvegardes" et créer un fichier archive qui ira dans le dossier /backup2/commerce-sql.tar

Donc j'en déduis qu'il faut utiliser la commande "tar" dans mon script qui est dans le fichier exo2.sh et qui aura pour action de crée une archive nommé commerce-sql.tar

Comment procéder ?

ce n'est pas tout ! une fois la copie effectuer le contenu du dossier /backup1 où sont toutes mes sauvegardes doit être vider .

ensuite je dois écrire une ligne à transmettre à crontab mais comment on vient de le voir je pense que je pourrai le faire seul maintenant smile

encore une fois dans l'exo on recommande l'utilisation des fonctions pour faire celà mais là je rame complet .

Je continue de bosser dessus mais bon si vous aviez une piste à m'indiquer svp ce serait super !
Je vous remercie par avance

Bon week-end smile

Hors ligne

#5 Le 02/02/2013, à 11:55

cervo

Re : besoin d'aide avec crontab avec le terminal

En effet, tu dois utiliser tar, voir la doc par ici pour comprendre comment ça fonctionne : http://doc.ubuntu-fr.org/tar
Donc ton script doit faire un truc du genre :

tar -cvf /backup2/commerce-sql.tar /backup1 // archive du dossier /backup1 dans /backup2/commerce-sql.tar
rm /backup1/* // suppression de tous les fichiers dans /backup1

Et pour ajouter ton script dans cron, je te laisse mettre en application ce que j'ai expliqué précedemment wink

En ce qui concerne les fonctions, pour executer 2 commandes (tar et rm), je ne vois pas l'intérêt, les fonctions sont utiles dans le cas où tu executes plusieurs fois la même commande au sein d'un script; ça permet de structurer ton code. Dans ce cas précis pour moi c'est inutile.

Dernière modification par cervo (Le 02/02/2013, à 11:59)

Hors ligne

#6 Le 02/02/2013, à 12:12

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Punaise je sais pas si tu es prof mais la je comprends tout de suite smile

de mon côté javais fais celà comme script:

tar -cf /backup2/commerce-sql.tar -c/backup1/*

L'étoile à la fin car je pense que ça prend tous les fichiers qui sont dans backup1 et il les compresse ?
parcontre dans ton code tu compresse le dossier backup1 et pas ce qu'il contient.

On me demande de sauvegarder le contenu mais peut -être qu'avec ta solution celà fait la même chose ?

Merci beaucoup pour ton aide smile je vais voir tous ça car il faut que je test, j'aime bien comprendre et pas faire juste du copier coller.

finalement en regardant ça ne semble bien compliquer enfin faut le savoir mon problème c'est la syntaxe car je ne pratique pas beaucoup...

Je repost dans j'aurais bien compris tout ça smile

Hors ligne

#7 Le 02/02/2013, à 12:24

cervo

Re : besoin d'aide avec crontab avec le terminal

Non, je suis pas prof, je suis développeur smile
Tant mieux si tu comprends, en effet le but n'est pas de te filer des commandes à copier-coller mais plutôt de t'apprendre à les utiliser.

Jette un coup d'oeil à la doc de tar, quand tu passes un dossier, cela prend le dossier et son contenu, quand tu le décompresseras, tu obtiendras un dossier nommé backup1 contenant  les fichiers qui étaient dans /backup1

Hors ligne

#8 Le 02/02/2013, à 12:44

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

ah oui d'accord donc pour toi c'est de "la rigolade" ce que je demande mais en tous cas tu expliques bien et du coup ça m'aide beaucoup !
c'est vraiment super sympa de m'aider ! smile

J'ai utilisé ta ligne de commande et c'est fonctionnel !

la je me fais des annotations dans un fichier openoffice sous unbutu avec les commandes que tu m'a dis comme ça j'apprends réellement.:)

Je vais faire la suite mais je pense que j'aurais besoin d'aide je vais essayé avant tout seul, les exos sont similaires mais je suis perdu par la moindre petite variation dans les demandes c'est aussi pour ça que j'ai du mal...

Hors ligne

#9 Le 02/02/2013, à 14:37

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

voilà à présent pour mon avant dernier exo je dois faire une sauvegarde  dans le dossier /backup2/commerce-sql.tar

Pour celà je fais un fichier exo3.sh toujours dans le dossier /backup.

on me demande de conserver la dernière sauvegarde SQL dans /backup1. Conséquence après la sauvegarde sql, le répertoire /backup1 contient deux fichiers, celui du jour et celui de la veille (ou de la fin de la semaine précédente).

Il me faut écrire un script dans le fichier exo3.sh qui ajoute la sauvegarde du jour contenu par le répertoire /backup1 dans l'archive /backup2/commerce-sql.tar et qui supprime la sauvegarde de la veille (ou de la fin de la semaine précédente...) du répertoire /backup1.

on me recommande encore une fois d'utiliser des fonctions mais bon comme je te le disais les fonctions je ne comprends pas....

la j'essais de faire le script à mettre dans exo3.sh ....

Hors ligne

#10 Le 02/02/2013, à 15:05

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

dans le fichier exo3.sh je met le même code que tout à l'heure

if
date = aujourd'hui sauvegarder commerce-sql.tar dans /backup2
then
supprimer la sauvegarde la veille
rm /backup1/ sauvegarde de la veille

fi

sauf qu'il y a une notion de date à préciser mais comme je ne connais pas la date à l'avance comment faire ? et puis je ne sais pas si  ma logique est bonne la syntaxe etc...

d'avance merci pour l'aide que tu pourra m'apporter smile

Hors ligne

#11 Le 02/02/2013, à 15:20

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

sinon je peux peut-être faire ce script:

if date -v=d //correspond je pense à  la date du jour ???//

then tar -cvf /backup2/commerce-sql.tar /backup1 //alors je sauvegarde le contenu de /backup1 dans /backup2 avec le nom de commerce-sql.tar

else
date -v-1d //correspond à la sauvegarde de la veille ???
rm /backup1/* //je supprime la sauvegarde de la veille (ou de la fin de semaine précédente)de /backup1

Est-ce que celà te semble bon stp ?

merci

Hors ligne

#12 Le 02/02/2013, à 16:01

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

ou encore mieux je pense voilà ce que j'ai fais: est-ce que c'est bon ? merci

//sauvegarde du jour de la base de données dans /backup1
mysqldump -A -u root >/backup1/commerce`date +%y%m%d`.sql

//si la date est la date du jour
if date -v=d/backup1

then
//alors j'archive la sauvegarde du jour dans backup 2
tar -cvf /backup2/commerce-sql.tar /backup1

fi //fin de la condition

//ensuite je veux élimer la sauvegarde de la veille de /backup1 de façon à ce qu'il ne reste qu'une sauvegarde dans /backup1

if
date -v-1d/backup1
then
rm /backup1/
fi

Hors ligne

#13 Le 03/02/2013, à 10:29

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Bonjour, Je pense avoir fais des erreurs, voici mes modifications:

//sauvegarde du jour de la base de données dans /backup1
mysqldump -A -u root >/backup1/commerce`date +%y%m%d`.sql

//si la date est la date du jour
if /backup1/commerce`date +%y%m%d`.sql

then
//alors j'archive la sauvegarde du jour dans backup 2
tar -cvf /backup2/commerce-sql.tar /backup1

fi //fin de la condition

//ensuite je veux élimer la sauvegarde de la veille de /backup1 de façon à ce qu'il ne reste qu'une sauvegarde dans /backup1

if /backup1/commerce`date +%y%m%-d`.sql ( "je met un -d pour avoir la sauvegarde de la veille mais est-ce bon ???")

then
rm /backup1/
fi

voilà si vous avez une idée svp ? merci smile

Hors ligne

#14 Le 03/02/2013, à 11:57

cervo

Re : besoin d'aide avec crontab avec le terminal

Salut,

J'ai pas trop le temps de te mettre la syntaxe exacte, va te falloir manger la doc de bash wink

Mais en gros, faut que tu récupère la date du jour et la date de la veille via une commande bash, et que tu stockes chacune de ces valeurs dans une variable.
Ensuite, vu que tu viens de faire le backup mysql, pas besoin d'une condition puisque tu sais qu'il existe, tu fais le cp dans ton dossier backup2.
Et ensuite, via la variable "date d'hier", tu reconstruis le path de ta sauvegarde de la veille et tu fais ton rm (pense pour le coup à faire une condition afin de vérifier que la sauvegarde de la veille a bien fonctionnée).

En espérant que ça t'aide ^^

Hors ligne

#15 Le 03/02/2013, à 12:09

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Salut, smile

Super merci beaucoup pour ces explications ! Je vais me pencher dessus et je posterai mon travail smile

Hors ligne

#16 Le 03/02/2013, à 14:29

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Salut

voilà ce que j'ai fais quand penses-tu ? merci smile

jour=$(date +%Y%m%d) #récupère la date du jour


mysqldump -A -u root >/backup1/commerce`date +%Y%m%d`.sql

tar -cvf /backup2/commerce-sql.tar /backup1


#récupère la date de la veille et supprime le fichier correspondant
rm /backup1/commerce `date --date='1 days ago' +%Y%m%d`.sql
echo 'le fichier de la veille a été supprimé'

Hors ligne

#17 Le 04/02/2013, à 19:32

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Salut,

C'est bon mon script est fonctionnel j'avais juste un petit souci de syntaxe dans le script de suppréssion de la veille "apparemment un simple espace en trop:rolleyes:
Pour tester si celà fonctionne bien au lieu de laisser alumer mon pc pour que chaque jour à "x" heure se lance la sauvegarde, j'ai fais un fichier fictif avec nano et je lui attribue la date de la veille avec ce format commerce20130203.sql
et mon script supprime bien ce fichier et il laisse celui crée du jour commerce20130204.sql

ouf celui là est fait smile

me reste plus que le dernier exo mais la c'est du lourd ! et sans votre aide je n'y arriverai surement pas hmm.

Je dois programmer interactivement des tâches périodiques.

Pour celà j'ai besoin de crée un programme qui va servir d'interface entre l'utilisateur et le pc qui va permettre de gérer la programmation gérés par crontab.
Je dois comme toujours mettre les scripts utiliser dans le dossier /backup.

Le programme doit permettre d'ajouter ou de supprimer une tâches parmi d'autres. Le programme saisira les différents paramètres, contrôlera leurs validités et transmettra la commande correcte à crontab.

Le script utilisera un ou plusieurs menus qui permetteront de limiter les erreurs. exemple: le premier menu proposera, d'ajouter une tâche, de supprimer une tâche ou de quitter le programme.
d'autres menus permetteront de choisir les valeurs des différents champs qui seront ensuite contrôlés avant d'ajouter effectivement la tâche.
Pour celà on me recommande d'utliliser des fonctions . à mon avis il n'y a pas le choix...

la liste des paramètres possibles est la minute, l'heure, le jour de la semaine, le programme à exécuter.

Bon voilà pour le sujet si quelqu'un à une idée s'il vous plaît je suis preneur car là c'est pas de la tarte sad

pour afficher le menu principal je pensais faire dans un fichier nommé exo4.sh toujours dans le dossier /backup.

affichemenu {
echo  1 "ajouter tâche"
echo 2  "supprimer une tâche"
echo 3 "quitter"
}

après le fais une autre fonction que j'appel récupmenu par exemple et selon le choix 1,2ou3 et bien je passe au sous menu mais bon toujours pareil est-ce que mon idée est bonne il y a surement des erreurs de syntaxe dans ce que j'ai fais au dessus mais bon comme je le disais plus haut je patauge alors toute aide et la bienvenue svp .

merci beaucoup, bonne soirée.:)

Hors ligne

#18 Le 04/02/2013, à 21:58

cervo

Re : besoin d'aide avec crontab avec le terminal

Hello,

Je te donne un squelette de programme pour que tu puisses voir comment j'imagine la solution.
Je l'ai codé en ruby (parce que c'est le langage que je maitrise le mieux), à toi de comprendre comment ça fonctionne, de le réécrire en bash et de le compléter (je ne vais pas tout faire quand même tongue) :

def menu_principal
  # boucle principale, tant qu'on demande pas au programme de s'arrêter, on affiche le menu
  stop = false
  while !stop do
    puts "======================"
    puts "Que voulez-vous faire?"
    puts "1) Ajouter une tâche"
    puts "2) Supprimer une tâche"
    puts "3) Quitter"
    puts "======================"
    
    v = gets.chomp
    case v.to_i
    when 1
      stop = menu_ajouter
    when 2
      stop = menu_supprimer
    when 3
      stop = true
    else
      puts "#####################################################"
      puts "### ERREUR : la valeur entrée n'est pas correcte! ###"
      puts "#####################################################"
    end
  end
end

def menu_ajouter
  puts "Vous avez choisi d'ajouter une tâche"
  puts "Quel est le script à executer?"
  prog = gets.chomp # récupération de la valeur entrée par le user
  if File.exists?(prog) # on vérifie que le script existe
    # init des variables heure, minute et secondes
    h = nil
    m = nil
    s = nil
    
    # on boucle jusqu'à ce que la valeur entrée par le user soit correcte : heure comprise entre 0 et 23
    h_ok = false
    while !h_ok do
      puts "Veuillez indiqué l'heure (0-23) :"
      h = gets.chomp.to_i
      h_ok = true if h >= 0 && h <= 23
    end
    
    # on boucle jusqu'à ce que la valeur entrée par le user soit correcte : minute comprise entre 0 et 59
    m_ok = false
    while !m_ok do
      puts "Veuillez indiqué la minute (0-59) :"
      m = gets.chomp.to_i
      m_ok = true if m >= 0 && m <= 59
    end
    
    # on boucle jusqu'à ce que la valeur entrée par le user soit correcte : seconde comprise entre 0 et 59
    s_ok = false
    while !s_ok do
      puts "Veuillez indiqué la seconde (0-59) :"
      s = gets.chomp.to_i
      s_ok = true if s >= 0 && s <= 59
    end
    
    # on demande confirmation au user
    puts "Vous allez ajouter le script #{prog} à #{h}:#{m}:#{s}"
    puts "Continuer? Y pour continuer"
    ok = gets.chomp
    if ok == "Y"
      ajout = ajouter_tache(prog, h, m, s)
      if ajout
        puts "Vous avez ajouté la tâche"
      else
        puts "#####################################################"
        puts "### ERREUR : La tâche n'a pas été ajoutée         ###"
        puts "#####################################################"
      end
      
    else
      puts "Vous avez annulé l'ajout de la tâche"
    end
  else
    puts "#####################################################"
    puts "### ERREUR : Le programme #{prog} n'existe pas    ###"
    puts "#####################################################"
  end
end

def ajouter_tache(tache, heure, minute, seconde)
  # ajout de la tâche
  # si ok, on retourne true, sinon on retourne false
  return true
end

def supprimer_tache(tache)
  # suppression de la tâche
  # si ok, on retourn true, sinon on retourne false
  return true
end

def menu_supprimer
  puts "Vous avez choisi de supprimer une tâche"
  puts "Veuillez indiquer le script à supprimer : "
  # on affiche la liste des tâches disponible
  # le user indique quelle est l'indice de la tâche à supprimer
  # on demande confirmation
  # on supprime en utilisant supprimer_tache(tache)
end

Hors ligne

#19 Le 04/02/2013, à 23:02

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Salut !

Je suis sidéré de voir avec quelle aisance tu travail, ce qui veux dire que j'ai du taf pouyr essayer de t'arriver à la cheville !

Je te remercie de ce que a réaliser et je vais dès à présent (c'est à dire demain) m'atteler à tâche de compréhension de qui fait quoi tant en therme de méthodologie que des fonctions utliser pour parvenir à "mes" fins.

Je te tiendrai au courant de l'appréciation qui serra faite des exercices car je compte quand même bien dire que j'ai été fortement soutenu par une personne hautement compétente dans le domaine traiter. notament pour le 4 ème exercices.

merci A+ smile

Hors ligne

#20 Le 06/02/2013, à 14:55

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Salut !

J'ai travaillé et j'ai fais un programme qui fonctionne: il me permet de choisir si je veux sauvegarder/archiver en tar le répertoire courant, ou archiver un autre répertoire ou quitter.

j'ai voulu y ajouter les fonctions complémentaire de l'exercice demander "ajouter une tâche", "supprimer une tâche" mais ça se complique:

J'ai procédé comme ceci: je crée trois fichiers, un qui est exécutable "d'ailleurs j'ai rendu les trois exécutables je ne sais pas si c'est une bonne chose ou pas?"
le deuxième qui contient les fonctions et les menus à afficher.

voici mes scripts:

nom du fichier:fonction.sh qui se trouve dans le répertoire /exo4 le fichier fonction.sh appel d'autres fonctions dans le fichier "fonctions2.sh"
début du script:

. ./fonctions2.sh
choix=x
while [ $choix != 'q' ]
do
    source="$0"
    AfficherMenu
    LireChoix
    AfficherChoix
    case $choix  in
        1 )   
            source=`pwd`
            GenereNomDestination
            Archiver
            ;;
   
        2 )
            LireRepertoire
            GenereNomDestination
            Archiver
            ;;
        3)   
            Sauvegarderjshm
            Generesauvegardejshm
            ;;
        * )
            ;;
    esac
    echo $source2
    echo $source
    echo $destination
done
Terminer

///////fin du script pour le fichier fonction.sh///////////////

////////début du script pour le fichier fonctions2.sh//////////

AfficherMenu()
{   
    echo "========================================"
    echo "Menu"
    echo "1: Sauvegarder le répertoire courant"
    echo "2: saisir le nom du répertoire à sauver"
    echo "3: Ajouter une tâche"
    echo "4: supprimer une tâche"
    echo "Q: Quitter"
    echo "Entrez votre choix?"
    echo "========================================"
}

LireChoix()
{
    read choix
    case $choix in
        1|2|3|4|q) ;;
        *)echo "choix non proposé";;
    esac
}

AfficherChoix()
{
    echo $choix
}

LireRepertoire()
{
    while [ ! -d $source ]
    do
        echo "entrer le nom du répertoire à archiver"
        read source
    done
}

Sauvegardejshm()
{

    while [ ! -d $source2 ]
    do
        echo "entrer le jour de sauvegarde, l'heure et la minute dans ce format jj/hh/mm"
        read source
    done

}

Generesauvegardejshm()
{

        rep2=`echo $source | sed -e 's/^\///' -e 's/\//_/g' `
    destination="/backup/"

}

GenereNomDestination()
{
    rep2=`echo $source | sed -e 's/^\///' -e 's/\//_/g' `
    destination="/backup/"$rep2"_"`date +%d%H%M`.tar
}

Archiver()
{
    tar cfv $destination $source
}

Terminer()
{
    echo "Aurevoir"
}

//////////fin du script pour le fichiers fonction2.sh//////////

maintenant je crée un fichier nommé scriptsav.sh que je place dans le dossier /backup pour rappel tout les script doivent  être dans le dossier /backup.

Dans ce fichier script j'y place ce code qui doit me permettre d'envoyer un ordre à crontab par l'intermédiaire du programme créer plus haut que l'utlisateur  va choisir la minute, l'heure et le jour de la sauvegarde.
j'ai fais celà mais je ne suis pas sur du tout:

/////début du script///////////
sudo crontab -e #j'entre dans crontab et crontab reçoi les infos que l'utlisateur à taper dans le programme#

mysqldump -A -u root >/backup1/ #la sauvegarde de la base de données se lance et va dans le dossier /backup1

////fin du script/////////


maintenant il faut que le programme  lance le script avec les données que l'utlisateur à entrer mais comment faire.

en fait ça donne la même chose que tu as fait en ruby mais je n'est malheuresement pas réussis à convertir ce code en shell hmm

Si tu as une idée stp cervo car je bloque complètement, je ne sais plus comment faire et vu que c'est noté j'ai peur de me prendre une bulle je te demande donc à nouveau ton aide stp
Je te remercie par avance
A +

Hors ligne

#21 Le 06/02/2013, à 15:01

cervo

Re : besoin d'aide avec crontab avec le terminal

Hello,

Pas le temps de tout vérifier, mais en survolant, ça parait cohérent.
Quel est le problème? Si c'est de pouvoir passer des paramètres lors de l'appel à ton script2.sh, et les interpreter, regarde du côté de http://www.commentcamarche.net/faq/5444 … parametres

Sinon, tu peux aussi tout coder dans un seul fichier et faire des appels à des fonctions, ce serait certainement plus simple, à toi de juger selon ce que tu veux faire.

Hors ligne

#22 Le 06/02/2013, à 16:54

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Salut,

merci pour ton aide smile

Pour coder tout dans un fichier oui mais je ne sais pas comment faire....
en fait mon problème et que j'aimerais récuperer les valeurs, minute, heure et jour de la semaine que l'utilisateur entre pour que ces paramètres soient envoyés à crontab et que celui-ci exécute ces paramètres.

je pense donc mettre le bout de code qui me manque dans le fichier fonctions2.sh dans la fonction:

Generesauvegardejshm()
{

        rep2=`echo $source | sed -e 's/^\///' -e 's/\//_/g' `
    destination="/backup/" # à cette endroit je pense qu'il faut y mettre quelques choses qui envoie l'ordre au fichier script2.sh ???

}

Mon problème est cette fichu syntaxe....je ne sais pas comment m'y prendre hmm

Je viens d'aller voir ton lien mais ça ne m'avance pas vraiment plus...

merci

Hors ligne

#23 Le 06/02/2013, à 21:28

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

Salut bon j'ai pas mal avancer smile

Mon souci est à ce niveau dans mon script, je n'arrive pas à récuperer la date au format jj/hh/mm que j'ai rentrée au clavier pour ensuite l'envoyer à crontab.

voici là ligne qui me pose problème:
rep2=`echo $source | sed -e 's/^\///' -e 's/\//_/g'  sudo  crontab -e date +%d%H%M `
        destination="/backup/"$rep2"commerce".tar

As tu une idée du souci stp cervo ?

au début mon programme me demande donc:
entrer le jour de sauvegarde, l'heure et la minute dans ce format jj/hh/mm
j'entre donc par exemple 10/20/45
puis en validant il me demande à nouveau d'entrer le jour de sauvegarde au format etc....

parcontre si je n'entre rien et que j'appuie sur entrée j'ai ce message:

sed: -e expression n°3, caractère 2: caractères inutiles après la commande

/backup/commerce.tar

puis mon menu de départ et à nouveau proposer.

La je suis perdu, toute idée et la bienvenue svp ?
merci smile

Hors ligne

#24 Le 06/02/2013, à 22:02

BOOMER29

Re : besoin d'aide avec crontab avec le terminal

autre modif cette fois il semblerait que ça fonctionne mais pas sur
voici mon nouveau code:

Generesauvegardejshm()
{

        rep2=`echo $source | sed -e 's/^\///' -e 's/\//_/g' | sudo  crontab -e `
        destination="/backup/"$rep2"commerce".tar

}



entrer le jour de sauvegarde, l'heure et la minute dans ce format jj/hh/mm
10/21/19
entrer le jour de sauvegarde, l'heure et la minute dans ce format jj/hh/mm ////demande à nouveau la même chose ???/////

quand je l'exécute je n'ai plus d'erreur parcontre il semble que ça tourne en boucle  donc j'appuie sur entrée et j'ai ce message:

Réception de SIGHUP ou SIGTERM

Espace écrit dans /tmp/crontab.R4CxEb/crontab.save
crontab: "/usr/bin/sensible-editor" exited with status 1

commerce.tar

Dernière modification par BOOMER29 (Le 06/02/2013, à 22:03)

Hors ligne

#25 Le 06/02/2013, à 22:52

cervo

Re : besoin d'aide avec crontab avec le terminal

Voici comment j'imaginais la solution à ton problème. C'est pas tout à fait fonctionnel mais je pense que ça répond assez bien à l'énoncé du problème, tu peux t'en inspirer pour ton programme.
Je suis pas un expert du bash donc il y a certainement mieux à faire et il y a certainement quelques bugs.

#!/bin/bash

menu_principal(){
  stop_value=false
  while [ "$stop_value" != "true" ]
  do
    echo "=> Bienvenue dans le menu d'édition de cron"
    echo "=> Veuillez indiquer l'action souhaitée :"
    echo "=> 1) Ajouter une tâche à la crontab"
    echo "=> 2) Supprimer une tâche de la crontab"
    echo "=> 3) Quitter"
    read action_value

    case "$action_value" in
      1) menu_ajouter
        ;;
      2) menu_supprimer
        ;;
      3) echo "=> Merci d'avoir utilisé ce programme. A bientôt!"
        stop_value=true
        ;;
      *)  echo "########################"
          echo "## Choix non autorisé ##"
          echo "########################"
        ;;
    esac
  done
  
}

menu_ajouter(){
  script_path=""
  while [ "$script_path" = "" ]
  do
    echo "=> Veuillez indiquer le chemin complet du script à ajouter :"
    read script_path
    if [ ! -f "$script_path" ]
    then
      echo "############################"
      echo "## Le script n'existe pas ##"
      echo "############################"
      script_path=""
    fi
  done
  
  script_day=-1
  while [[ "$script_day" -lt "0" || "$script_day" -gt "6" ]]
  do
    echo "=> Veuillez indiquer le jour d'execution :"
    echo "=> 1) Lundi"
    echo "=> 2) Mardi"
    echo "=> 3) Mercredi"
    echo "=> 4) Jeudi"
    echo "=> 5) Vendredi"
    echo "=> 6) Samedi"
    echo "=> 0) Dimanche"
    read script_day
    
    if [[ "$script_day" -lt "0" || "$script_day" -gt "6" ]]
    then
      echo "########################"
      echo "## Choix non autorisé ##"
      echo "########################"
      script_day=-1
    fi
  done
  
  script_hour=-1
  while [[ "$script_hour" -lt "0" || "$script_day" -gt "23" ]]
  do
    echo "=> Veuillez indiquer l'heure d'execution :"
    read script_hour
    if [[ "$script_hour" -lt "0" || "$script_hour" -gt "23" ]]
    then
      echo "##########################################"
      echo "## Une heure est comprise entre 0 et 23 ##"
      echo "##########################################"
      script_hour=-1
    fi
  done
  
  script_minute=-1
  while [[ "$script_minute" -lt "0" || "$script_minute" -gt "59" ]]
  do
    echo "=> Veuillez indiquer la minute d'execution :"
    read script_minute
    if [[ "$script_minute" -lt "0" || "$script_minute" -gt "59" ]]
    then
      echo "###########################################"
      echo "## Une minute est comprise entre 0 et 59 ##"
      echo "###########################################"
      script_minute=-1
    fi
  done
  
  number_to_day="Inconnu"
  case "$script_day" in
    0) number_to_day="Dimanche";;
    1) number_to_day="Lundi";;
    2) number_to_day="Mardi";;
    3) number_to_day="Mercredi";;
    4) number_to_day="Jeudi";;
    5) number_to_day="Vendredi";;
    6) number_to_day="Samedi";;
  esac
  
  echo "Le script ${script_path} va s'executer le ${number_to_day} à ${script_hour}h${script_minute}"
  echo "Valider? Y pour valider"
  read confirm_value
  if [ "$confirm_value" = "Y" ]
  then
    crontab -l > tmp_crontab
    echo "${script_minute} ${script_hour} * * ${script_day} ${script_path}" >> tmp_crontab
    crontab tmp_crontab
    rm tmp_crontab
    echo "OK!"
  else
    echo "####################"
    echo "## Action annulée ##"
    echo "####################"
  fi
}

menu_supprimer(){
  # TODO : si le fichier de crontab est vide, l'indiquer et ne pas proposer au user de supprimer une ligne
  echo "Voici votre crontab, quelle ligne voulez-vous supprimer?"
  crontab -l > tmp_crontab
  cat -n tmp_crontab
  total_lines=$(wc -l tmp_crontab | awk '{print $1}')
  read line_number
  
  if [[ "$line_number" -gt "0" &&  "$line_number" -le "$total_lines" ]]
  then
    # TODO : ne fonctionne pas, corriger le bug
    #sed '${line_number},${line_number}d' crontab > new_crontab
    #rm crontab
    #crontab new_crontab
    echo "OK!"
  else
    echo "##############################################"
    echo "## Cette ligne n'existe pas dans le fichier ##"
    echo "##############################################"
  fi
}

menu_principal

Hors ligne