Shell : besoin d'aide pour mon script

Shell : besoin d'aide pour mon script - Shell/Batch - Programmation

Marsh Posté le 16-07-2009 à 15:35:38    

Bonjour à tous,
 
Pour ma boite, je dois installer un site eCommerce démo utilisable par n'importe quel internaute. Comme ça risque d'être rapidement le bazar, je pense mettre en place un script exécuté quotidiennement qui écrasera les fichiers du site (afin de virer les images ou autres fichiers uploadés) et recréera une base de donnée propre.
 
Le problème, c'est que mes cours de shell sont loin et que j'aurais donc besoin de votre aide pour être sûr de ne pas faire de bêtise.
 
Voici ce que j'ai fait :

Code :
  1. cd /var/www/vhosts/site-demo/httpdocs     #chemin des fichiers du site
  2. rm -Rf *     #Supperssion de tous les fichiers et dossiers
  3. cd ..     #dossier parent
  4. tar xjvf httpdocs.tar.bz2     #décompactage de l'archive de sauvegarde


 
Trouvez-vous ceci correct pour l'instant ?
 
Maintenant, j'aimerais faire la même chose pour la base de donnée, mais je ne vois pas comment faire.
 
Voici les commandes mysql à faire pour commencer :

Code :
  1. drop database site-demo
  2. create database site-demo


 
Puis ensuite l'envoi de la sauvegarde dans la base :

Code :
  1. zcat sauvegarde.sql.gz | mysql --user=login --password=pass site-demo


 
Voilà, pourriez-vous m'éclairer ?
 
Merci d'avance :)

Reply

Marsh Posté le 16-07-2009 à 15:35:38   

Reply

Marsh Posté le 16-07-2009 à 15:52:59    

déja pour le script, ca ne me parait pas très prudent... si un jour qqun déplace le site, ton cd se vautre, et il efface tout la ou il est... j'aurais plutot fait un

Code :
  1. rm -Rf /var/www/vhosts/site-demo/httpdocs

ou alors au moins vérifier que le répertoire existe bien avant...
 
et sinon pour la base, je ne vois pas ce qui te bloque... tu as tout dit... éventuellement, mets juste ton drop et ton create au début de ton fichier sauvegarde.sql.gz et ca devrait rouler...

Reply

Marsh Posté le 16-07-2009 à 16:00:39    

Je n'étais pas vraiment bloqué mais plutôt pas confiant ;)
 
Effectivement, ta commande de suppression est bien plus efficace.
 
Je vais tester tout ça.
 
Merci à toi :)

Reply

Marsh Posté le 17-07-2009 à 19:58:24    

pataluc a écrit :

déja pour le script, ca ne me parait pas très prudent... si un jour qqun déplace le site, ton cd se vautre, et il efface tout la ou il est... j'aurais plutot fait un

Code :
  1. rm -Rf /var/www/vhosts/site-demo/httpdocs

ou alors au moins vérifier que le répertoire existe bien avant...


 
La remarque est fondée (bien qu'on puisse remplacer "cd machin; rm -fr *" par "cd machin && rm -fr *" ce qui évite au rm de se lancer si le cd se vautre). Mais généralement j'évite moi-aussi de faire des cd dans mes scripts, je préfère travailler en indiquant où bosser. Toutefois ça peut aussi être dangereux car voici ce que j'ai fait un jour...
J'avais l'habitude, sur ma sun solaris, de purger régulièrement tmp. Je faisais donc

Code :
  1. cd /tmp
  2. rm -fr * .*


 
Ca marchait parfaitement. Puis un jour, j'ai voulu aller plus vite et j'ai tapé

Code :
  1. rm -fr /tmp/* /tmp/.*


Et là, la commande a commencé à durer... durer... Je regardais mon écran sans trop comprendre... puis soudain j'ai réalisé que dans ".*" il avait aussi "..". Et effectivement le rm était remonté à la racine et balayait toute l'arborescence. Total => réinstallation de ma machine. Pas grave car il n'y avait rien de primordial mais pas amusant non plus. Donc méfiance envers les rm *
 

nero27 a écrit :


Maintenant, j'aimerais faire la même chose pour la base de donnée, mais je ne vois pas comment faire.
 
Voici les commandes mysql à faire pour commencer :

Code :
  1. drop database site-demo
  2. create database site-demo


 
Puis ensuite l'envoi de la sauvegarde dans la base :

Code :
  1. zcat sauvegarde.sql.gz | mysql --user=login --password=pass site-demo


 

pataluc a écrit :

et sinon pour la base, je ne vois pas ce qui te bloque... tu as tout dit... éventuellement, mets juste ton drop et ton create au début de ton fichier sauvegarde.sql.gz et ca devrait rouler...



On peut mettre les lignes suivantes

Code :
  1. drop database IF EXISTS site-demo;
  2. create database site-demo;
  3. use site-demo;


au début du fichier sql. Le "if exists" a été rajouté à MySQL v5. Mais il semble que dans cet outil, le nom de la bdd n'est pas fixé à l'avance puisqu'on te demande de lancer une connexion sur "site-demo". Or si tu mets le nom de la bdd en dur dans le script sql, tu ne pourras plus le paramétrer ensuite.
 
Il y a aussi la solution de lancer les commandes en live depuis un script qui reçoit le nom de la bdd en paramètre. Un truc de ce style

Code :
  1. #!/bin/sh
  2. rep="/var/www/vhosts/site-demo"
  3. bdd=${1:-site-demo}
  4. cd "$rep"
  5. rm -Rf httpdocs
  6. tar xjpvf httpdocs.tar.bz2
  7. echo "drop database if exists $bdd;" |mysql --user=login --password=pass
  8. echo "create database $bdd;" |mysql --user=login --password=pass
  9. zcat sauvegarde.sql.gz | mysql --user=login --password=pass "$bdd"


Message édité par Sve@r le 17-07-2009 à 20:25:12

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed