Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 2

Julien Enselme, 05/04/2013 19:16
Suppression catégorie (reste mediawiki)

1 1 Julien Enselme
Afin de gagner du temps et d'éviter les erreurs humaines, des scripts ont été écrits tout au long du projet. Certains sont même exécutés automatiquement toutes les semaines.
2
3
{{toc}}
4
5
h1. Les tâches planifiées
6
7
Pour exécuter ces tâches régulièrement, on utilise le [http://fr.wikipedia.org/wiki/Crontab crontab]. Il s'agit d'un programme installé sur notre serveur.
8
Pour voir et modifier la liste des actions 
9
# se connecter au serveur : ssh assos@sas1.centrale-marseille
10
# taper la commande crontab -l (pour voir le crontab)
11
# taper la commande crontab -e (pour modifier le crontab). /!\ ne pas effectuer cette opération avant de s'être renseigné sur [http://fr.wikipedia.org/wiki/Vi  vi] (l'éditeur de texte utilisé qui n'est pas vraiment intuitif :p) et sur [http://fr.wikipedia.org/wiki/Crontab#Modification  la syntaxe du crontab] !
12
13
Voici la liste des tâches effectuées régulièrement.
14
15
h2. la mise à jour des projets
16
17
<note> sur l'installation d6 uniquement pour le moment ; devra être fait pour l'installation d7 (date du jour : 25 avril 12)
18
<br>=> une fois par semaine </note>
19
20
Voici les différentes étapes réalisées :
21
# Activer partout le module <code>update</code>. C'est lui qui gère la vérification des versions, l'envoi de notifications par mail ainsi que les mises à jour via drush, il est donc indispensable qu'il soit activé.
22
# Lancer le cron pour que les sites sachent s'il y a des majs à faire
23
# Supprimer le cache des sites pour réduire drastiquement la taille des bases de données sauvegardées.
24
# Exécuter le [[ Scripts_et_tâches_planifiées#dump.sh_and_co |script de sauvegarde des bases de données]]
25
# Vérifier les versions des projets et au besoin, mettre à jour leur code
26
# Exécuter la [[ Utilisation_de_Drupal_multi-site#Mise_.C3.A0_jour_de_la_base_de_donn.C3.A9es |mise à jour des bases de données]]
27
# Exécuter une nouvelle fois le cron
28
# Exécuter le [[ Scripts_et_tâches_planifiées#taille.sh |script de rapport sur la taille utilisée du disque]] et l'envoyer par mail au club Drupal
29
# Dater les logs et les sauvegarder au bon endroit
30
# Désactiver le module <code>update</code> (vu qu'il est réactivé avant la mise à jour et que celle-ci a lieu toutes les semaines, il y a peu d'intérêt à le garder activé le reste du temps)
31
32
Les étapes 2 à 9 sont gérés par le script [[Scripts_et_tâches_planifiées#maj.sh | maj.sh]], le reste est directement écrit dans le crontab.
33
34
h2. la mise à jour des traductions
35
36
=> sur les installations d6 et d7
37
<br>=> une fois par jour
38
39
Voici les étapes effectuées :
40
* Activer partout le module <code>l10n_update</code>. C'est lui qui gère la mise à jour des traductions
41
* Vérifier s'il y a des nouvelles chaînes traduites disponibles
42
* Ajouter les nouvelles traductions disponibles
43
* Désactiver le module <code>l10n_update</code>
44
45
Pour drupal 6, les différentes instructions sont écrites directement dans le crontab. Pour drupal 7, on utilise [[ Scripts_et_tâches_planifiées#drush_maj_trad |l'alias drush perso <code> drush maj_trad</code>]] dans le crontab.
46
47
h2. la réinitialisation des droits d'accès
48
49
=> sur les installations d6 et d7
50
<br>=> toutes les semaines, après les D&D du club drupal
51
52
Cette tâche utilise le script [[Scripts_et_tâches_planifiées#ch_mdp | ch_mdp ]] afin de rétablir les droits d'accès recommandés par drupal sur 
53
* les dossiers des sites 
54
* les settings.php des sites
55
56
h2. la réinitialisation des variables dangeureuses
57
58
=> sur l'installation d7 principalement
59
<br>=> une fois par semaine
60
61
Cette tâche consiste à réinitialiser certaines variables qui donnent des droits considérés comme trop permissifs donc dangereux aux administrateurs des sites. En voici la liste
62
63
<pre>
64
<code class="bash">
65
drushall_atest vset error_level 0 --yes
66
</code>
67
</pre>
68
69
Cette commande permet de ne pas afficher les messages d'erreurs aux utilisateurs autre que les administrateurs. En effet, ils contiennent parfois des informations sensibles sur l'installation et ne doivent donc pas être divulgués à n'importe qui.
70
<pre>
71
<code class="php">
72
drushall_atest php-eval variable_set\(\'allow_authorize_operations\',FALSE\)\;
73
</code>
74
</pre>
75
76
Cette commande  permet de ne pas autoriser les utilisateurs à installer et mettre à jour des modules via l'interface du site (fonctionnalité introduite dans drupal7). En effet, seul le club Drupal maintient les codes des projet, afin d'en garantir la pérennité.
77
78
<pre>
79
<code class="php">
80
drushall_atest vset --always-set reverse_proxy TRUE
81
drushall_atest vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
82
</code>
83
</pre>
84
Ces commandes permettent de déclarer à drupal les serveurs proxy du CRI afin d'éviter qu'il ne répertorie tous les visiteurs comme ayant l'adresse des sus-cités serveurs. Pour plus d'info, voir le mail de dgeo du 15 mai 2012.
85
86
h3. Comment le lancer ?
87
88
<br>N'importe où, taper <code>reinit_var.sh</code>.
89
90
h2. la sauvegarde des bases de données
91
92
=> sur les installations d6 et d7
93
<br>=> une fois par semaine
94
95
On utilise les [[ Scripts_et_tâches_planifiées#Tout_sauvegarder | scripts de sauvegarde créés par le club Drupal]].
96
97
h2. la purge des sauvegardes de bdd
98
99
=> sur les installations d6 et d7
100
<br>=> toutes les semaines
101
102
Cette tâche utilise le script de [[Scripts_et_tâches_planifiées#purge_des_sauvegardes.sh | purge des sauvegardes ]] afin de libérer de l'espace disque en supprimant les sauvegardes de bdd les plus vieilles.
103
104
h1. Liste des scripts à disposition
105
106
Les scripts utilisés sont hébergés dans le répertoire bin du compte assos.
107
108
h2. ch_mdp
109
110
S'il est exécuté tel quel, sans être modifié, il se contente de rétablir les bons droits sur les dossiers des sites et sur les settings.php de nos deux installations.
111
112
Il a cependant été initialement écrit pour permettre de prendre acte de la modification du mot de passe de la base de données rapidement dans tous les settings.php.
113
114
Pour effectuer cette action, il faut rentrer l'ancien et le nouveau mot de passe à la ligne <code>sed 's/ancien_mdp/nvo_mdp/g' < $fichier.old > $fichier </code> puis lancer le script.
115
116
Plus d'info sur comment ça marche en lisant [http://fr.wikipedia.org/wiki/Stream_Editor#Utilisation la documentation de la commande sed] et les commentaires laissés dans le code du script.
117
118
h3. Comment le lancer ?
119
120
Il suffit de taper "ch_mdp" n'importe où dans le compte assos.
121
122
h3. À quoi ça ressemble ?
123
124
<pre>
125
<code class="bash">
126
cd [drupal directory]/sites
127
128
for x in $(ls -1 | grep -v 'all'); do
129
	<br>chmod +w $x
130
	<br>cd $x;
131
	<br>echo $x
132
	<br>fichier="settings.php" 
133
	<br>chmod 600 $fichier
134
	<br>mv $fichier $fichier.old
135
	<br> #remplacer la première chaine après le / par l'ancien mot de passe, et la seconde chaine (après le deuxième /) par le nouveau mot de passe
136
	<br>sed 's/ancien_mdp/nvo_mdp/g' < $fichier.old > $fichier
137
	<br>chmod 400 $fichier
138
	<br>rm $fichier.old
139
	<br>cd ..
140
	<br>chmod -w $x
141
	<br>done
142
</code>
143
</pre>
144
145
h2. dis_tiers.sh et en_tiers.sh
146
147
Créé en juillet 2011 dans le cadre de [[ De_Drupal6_vers_Drupal7 | la migration de d6 à d7]], ces scripts permettent respectivement de désactiver et réactiver tous les modules tiers (c'est-à-dire les modules qui ne font pas partie du noyau / core de drupal, ceux qui sont installé dans sites/all/modules).
148
149
En effet, il s'agit de deux étapes indipensables pour la migration d'un site.
150
151
152
h3. Comment les lancer ?
153
154
Il suffit de taper "dis_tiers.sh" ou "en_tiers.sh" dans le dossier du site en question.
155
156
h3. À quoi ça ressemble ?
157
158
<pre>
159
<code class="bash">
160
##dis_tiers.sh
161
#écrire le nom des modules non core dans un fichier
162
drush pml |grep -v Core* | grep Module | grep Enabled > fichier.temp
163
sed -e 's/\(.*(\)\(.*\)\().*\)/\2/' fichier.temp > modules_tiers.txt
164
#désactiver ces modules
165
for line in $(cat modules_tiers.txt); do drush dis -y "$line" ; done  
166
#effacer les fichiers créés
167
rm fichier.temp
168
169
##en_tiers.sh
170
#activer ces modules du fichier texte
171
for line in $(cat modules_tiers.txt); do drush en -y "$line" ; done 
172
</code>
173
</pre>
174
175
NB : dis_tiers.sh crée un fichier texte contenant la liste des modules tiers qui étaient activés sur le site. Il faut donc :
176
* avoir des droits d'écriture sur le dossier du site pour l'exécuter
177
* penser à supprimer ce fichier et à remettre les droits correctement (par exemple en lançant le script [[Scripts_et_tâches_planifiées#ch_mdp | ch_mdp ]]) après
178
179
h2. drushall and co
180
181
Pour administrer tous les sites du multi-site en une seule fois, nous avons créé un script à partir de drush.
182
Il s'utilise comme drush, mais effectue la commande drush tapée sur tous les sites de l'installation un par un.
183
184
h3. Comment on le lance ?
185
186
Sur l'installation d6, on lance <code>drushall</code> n'importe où.
187
188
Sur l'installation d7, on lance <code>drushall_atest</code> n'importe où.
189
190
h3. À quoi ça ressemble ?
191
192
<pre>
193
<code class="bash">
194
#~/bin/sh
195
# si pas d'arguments :
196
if [ $# -lt 1 ]; then
197
  echo "usage: $0 <drush args>"
198
  exit 1
199
fi
200
201
cd [drupal directory]/sites
202
203
for x in $(ls -1 | grep -v 'all'); do
204
  if [ -d $x -a ! -L $x ]; then
205
    cd $x;
206
    echo $x
207
    drush $*
208
    cd -;
209
  fi
210
done
211
</code>
212
</pre>
213
214
h2. drushcronone
215
216
h3. Histoire
217
218
Ce script a été introduit pour la version 6 du projet essentiellement pour améliorer les performances : au lieu de faire un wget sur le cron.php d'un site, valait mieux exécuter le script 'en interne'.
219
220
h3. Besoin
221
222
La version 7 du projet en a besoin plus que jamais ! puisque le cron.php n'est plus 'wget'able sans une chaîne de codes à ajouter à l'url publique, sinon il faut avoir les droits nécessaires.
223
224
h3. Usage
225
226
Donc pour exécuter le cron pour un seul site, il suffit de donner le nom du répertoire.
227
Exemple :<code>drushcronone assos.centrale-marseille.fr.cac13</code>
228
229
Q : Où est ce que ce script est le plus utilisé ?
230
231
R : Dans les tâches planifiés (crontab) bien sûr !
232
233
h2. dump.sh and co
234
235
h3. Sauvegarder uniquement les tables d'un site
236
237
On a créé des scripts qui permettent de sauvegarder uniquement les tables associés à un site (et non toute la base).
238
Ils se lancent n'importe où (mais attention, la sauvegarde est effectuée là où il est lancé, donc à ne pas lancer dans dossier accessible par n'importe qui !) en tapant <code>dump_site nom_de_site</code> (d6) ou <code>dump_site_atest nom_du_site</code> (d7).
239
Le nom du site à fournir est le préfixe utilisé dans la base de données.<br>
240
Ils ressemblent à :
241
<pre>
242
<code class="bash">
243
#récupération des tables du site dans le fichier liste_tables.temp
244
tables='_%'
245
liste="$1$tables"
246
247
mysql -h serveur -u utilisateur --password=super_mot-de-passe -BNe "show tables like '"$liste"'" base_de_données | tr '\r\n' ' ' > liste_tables.temp
248
249
#transformation de cette liste en une variable
250
var=$(cat liste_tables.temp)
251
252
253
#sauvegarde de toutes ces tables
254
suffixe="_dump.sql"
255
fichier="$1$suffixe"
256
257
mysqldump base_de_données -h serveur -u utilisateur --password=super_mot-de-passe $var > $fichier
258
259
#suppression du fichier temporaire utilisé
260
rm liste_tables.temp
261
</code>
262
</pre>
263
264
h3. Tout sauvegarder
265
266
Pour drupal 6, on a un script qui réalise la sauvegarde de toute la base en une seule fois : <code> dump.sh</code>. Il _ressemble_ à ça :
267
<pre>
268
<code class="bash">
269
mysqldump nom_de_la_base -h serveur -u utilisateur --password=super_mot_de_passe_trop_bien > ~/chemin_vers_la/sauvegarde.dump.sql
270
</code>
271
</pre>
272
273
Pour drupal 7, on a un script plus complet : <code>dump_site_atest_all</code>.
274
275
On utilise d'abord le script de sauvegarde individuelle des sites (<code> dump_site_atest</code>) appliqué sur tous les sites un par un. Puis on effectue également une sauvegarde complète au cas où ^^
276
277
Ils se lancent n'importe où.
278
279
h2. maj.sh
280
281
Ce script  est principalement constitué d'une suite de commandes drush et d'appels à d'autres scripts du projet.
282
283
Plus d'info sur les étapes précises dans les commentaires du script lui-même et dans le [[Scripts_et_tâches_planifiées#la_mise_.C3.A0_jour_des_projets | paragraphe suivant]].
284
285
h3. Comment le lancer ?
286
287
<code>maj.sh</code> ou <code>maj_d7.sh</code>, n'importe où.
288
289
NB : il faut que le module <code>update</code> soit activé sur tous les sites de l'installation pour que ce script fonctionne.
290
291
h2. usep
292
293
Ce script a été créé dans le cadre de la [[De_Drupal6_vers_Drupal7 | migration de drupal 6 à drupal 7]] mais peut être utilisé pour des tas de choses : il permet de savoir quels sont les sites qui utilisent (c'est-à-dire qui ont activé) un projet donné.
294
<br>Pour le moment, il n'est fonctionnel que pour drupal 6, mais peut être adapté sans mal à drupal 7.
295
296
h3. Comment le lancer ?
297
298
Taper <code>usep projet</code> dans n'importe quel dossier de site de l'installation drupal 6.
299
300
h3. À quoi ça ressemble ?
301
302
(quelques  commentaires sont également dispo directement dans le script pour mieux comprendre son fonctionnement)
303
<pre>
304
<code class="bash">
305
#si pas d'argument donnés :
306
if [ $# -lt 1 ]; then
307
  echo "usage: $0 <drush args>"
308
  exit 1
309
fi
310
311
312
cd [drupal_directory]/sites
313
314
315
for x in $(ls -1 | grep -v 'all' | grep -v file-*); do
316
  if [ -d $x -a ! -L $x ]; then
317
    cd $x;
318
    if [ 1 = `drush pml --no-core --status=enabled | grep $1 | wc -l` ]; then
319
             echo $x; 
320
            fi
321
    cd -;
322
  fi
323
done
324
</code>
325
</pre>
326
327
h2. taille.sh
328
329
Ce script utilise la commande <code>du -hcs</code> pour retourner l'espace disque utilisé sur le compte assos, ainsi que sa répartition dans les différents répertoires des sites).
330
331
Ce script est notamment utilisé à la fin du script de mise à jour de projet ; son résultat est envoyé par mail au club drupal pour vérification.
332
333
h2. init_var.sh
334
335
Ce script permet d'initialiser des configurations et variables dangereuses, pour l'installation drupal 7. Il faut le lancer après chaque installation de sous-site.
336
337
h3. Comment le lancer ?
338
339
Taper <code>init_var.sh</code> (ou <code>drush init</code>) dans le dossier du site.
340
341
h3. À quoi ça ressemble ?
342
343
<pre>
344
<code class="bash">
345
drush vset error_level 0 --yes
346
</code>
347
</pre>
348
349
Cette commande permet de ne pas afficher les messages d'erreurs aux utilisateurs autre que les administrateurs. En effet, ils contiennent parfois des informations sensibles sur l'installation et ne doivent donc pas être divulguées à n'importe qui.
350
351
<pre>
352
<code class="php">
353
drush php-eval variable_set\(\'allow_authorize_operations\',FALSE\)\; 
354
</code>
355
</pre>
356
357
Cette commande  permet de ne pas autoriser les utilisateurs à installer et mettre à jour des modules via l'interface du site (fonctionnalité introduite dans drupal7). En effet, seul le club Drupal maintient les codes des projet, afin d'en garantir la pérennité.
358
359
<pre>
360
<code class="bash">
361
drush vset --always-set reverse_proxy TRUE
362
drush vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
363
</code>
364
</pre>
365
366
Ces commandes permettent de déclarer à drupal les serveurs proxy du CRI afin d'éviter qu'il ne répertorie tous les visiteurs comme ayant l'adresse des sus-cités serveurs. Pour plus d'info, voir le mail de dgeo du 15 mai 2012.
367
<pre>
368
<code class = "bash">
369
drush ev "variable_set('update_notify_emails', array('coucouuu@example.com'));"
370
</code>
371
</pre>
372
373
Cette commande permet de modifier l'adresse de la personne qui recevra des notifications lorsqu'une nouvelle mise à jour (projet ou noyau drupal) est disponible (NB : c'est le module (du noyau) "update" qui gère ces envois, s'il est désactivé, aucune vérification des versions n'est effectuée)
374
Pour ne pas déranger les webmasters avec ceci, il faut mettre l'adresse du club drupal.
375
376
h2. reinit_var.sh
377
378
Ce script est utilisé pour réinitialiser des configurations et variables dangereuses sur tous les sites.
379
<br>Des informations détaillées sont disponibles dans [[Scripts_et_tâches_planifiées#la_r.C3.A9initialisation_des_variables_dangeureuses | ce paragraphe]].
380
381
h3. Comment le lancer ?
382
383
Taper <code>reinit_var.sh</code> n'importe où.
384
385
h2. purge_des_sauvegardes.sh
386
387
Ce script permet de supprimer les vieilles sauvegardes de base de données, afin de libérer de l'espace disque.
388
389
Le script nettoie les sauvegardes de sites individuels et les sauvegardes des bases de données complètes d6 et d7.
390
391
392
h3. Comment le lancer ?
393
394
Il suffit de taper "purge_des_sauvegardes.sh" n'importe où dans le compte assos.
395
396
h3. À quoi ça ressemble ?
397
398
<pre>
399
<code class="bash">
400
cd [dump directory]
401
402
if [ $(ls -l | wc -l)  -gt YY ] ; then # s'il y a plus de YY fichiers alors
403
404
ls -tr | head -XX | xargs rm; #supprime les XX fichiers les plus vieux
405
406
else # sinon, alerte
407
408
echo "mon message d'erreur" | mail -s "[dump assos] mon message d'erreur" assos@centrale-marseille.fr ;
409
410
fi
411
</code>
412
</pre>
413
414
415
NB : Ce script supprime les x sauvegardes les plus vieilles de chaque catégorie (sites d7, tout d6, tout d7), sans aucune notion de temps. Cela implique que si des sauvegardes ont été faites manuellement, des sauvegardes automatiques plus vieilles seront supprimées (alors qu'elles ne sont pas nécessairement périmées !).
416
417
h1. Liste des alias drush à disposition
418
419
Les alias drush sont hébergés dans le fichier drushrc.php du .drush du compte assos.
420
421
h2. drush init
422
423
h3. À quoi ça sert ?
424
425
Ce script initialise les variables dangereuses, en faisant appel au scrit [[Scripts_et_tâches_planifiées#init_var.sh | init_var.sh]]. Les deux peuvent s'utiliser indifféremment.
426
427
h3. Comment l'utiliser ?
428
429
Dans le dossier d'un site (drupal 7 uniquement), taper <code>drush init</code> (ou <code>init_var.sh</code>).
430
431
Pour initialiser les variables de tous les sites (drupal 7 uniquement), dans le dossier sites, taper <code>drushall_atest init</code>
432
433
h2. drush maj_trad
434
435
h3. À quoi ça sert ?
436
437
Ce script met à jour les traductions, en suivant [[ Scripts_et_tâches_planifiées#la_mise_.C3.A0_jour_des_traductions| la procédure décrite ici]].
438
439
h3. Comment l'utiliser ?
440
441
Dans le dossier d'un site (drupal 6 ou 7), taper <code>drush maj_trad</code>.
442
443 2 Julien Enselme
Pour mettre à jour les traductions de tous les sites (drupal 7 ou 6), dans le dossier sites, taper <code>drushall maj_trad</code> (ou <code>drushall_atest maj_trad</code> selon le cas).