Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 26

Florent Torregrosa, 04/08/2013 17:19
prepare crontab section

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 13 Florent Torregrosa
{{>toc}}
4 1 Julien Enselme
5
h1. Les tâches planifiées
6
7 26 Florent Torregrosa
h2. Crontab
8
9 3 Julien Enselme
Pour exécuter ces tâches régulièrement, on utilise le "crontab":http://fr.wikipedia.org/wiki/Crontab. Il s'agit d'un programme installé sur notre serveur.
10 1 Julien Enselme
11 3 Julien Enselme
Pour voir et modifier la liste des actions :
12
# se connecter au serveur : <code>ssh assos@sas1.centrale-marseille</code>
13
# taper la commande pour voir le crontab <code>crontab -l</code>
14
# taper la commande pour modifier le crontab <code>crontab -e</code>. /!\ Ne pas effectuer cette opération avant de s'être renseigné sur "vi":http://fr.wikipedia.org/wiki/Vi (l'éditeur de texte utilisé qui n'est pas vraiment intuitif :p) et sur "la syntaxe du crontab":http://fr.wikipedia.org/wiki/Crontab#Modification !
15
16 24 Florent Torregrosa
{{tip(Pour utiliser un autre editeur que vi taper : export EDITOR=editor_name exemple : vim, nano)}}
17 26 Florent Torregrosa
18
<pre>
19
<code class="php">
20
Ici bientôt le crontab
21
</code>
22
</pre>
23
24
h3. 
25 24 Florent Torregrosa
26 1 Julien Enselme
Voici la liste des tâches effectuées régulièrement.
27
28 25 Florent Torregrosa
h2. La réinitialisation des variables
29 1 Julien Enselme
30 25 Florent Torregrosa
Cette tâche consiste à réinitialiser certaines variables qui donnent des droits considérés comme trop permissifs donc dangereux aux administrateurs des sites ou nécessaire pour d'autres scripts tels que piwik ou security_review.
31 3 Julien Enselme
32 25 Florent Torregrosa
En voici quelques exemples :
33
34 1 Julien Enselme
<pre>
35
<code class="bash">
36 25 Florent Torregrosa
drush -y vset error_level 0
37 1 Julien Enselme
</code>
38
</pre>
39
40 25 Florent Torregrosa
Cette commande permet de ne pas afficher les messages d'erreurs. En effet, ils contiennent parfois des informations sensibles sur l'installation et ne doivent donc pas être divulgués à n'importe qui.
41
42 1 Julien Enselme
<pre>
43 21 Florent Torregrosa
<code class="php">
44 25 Florent Torregrosa
drush -y vset --always-set reverse_proxy TRUE
45
drush -y vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
46 3 Julien Enselme
</code>
47 1 Julien Enselme
</pre>
48
49 25 Florent Torregrosa
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 serveurs sus-cités. **Pas fini : voir http://assos.centrale-marseille.fr/content/t%C3%A2che/d%C3%A9clarer-les-proxy-du-cri-%C3%A0-drupal**
50 1 Julien Enselme
51 3 Julien Enselme
h2. La sauvegarde des bases de données
52 1 Julien Enselme
53 3 Julien Enselme
Sur les installations d6 et d7 : une fois par semaine
54 1 Julien Enselme
55 6 Julien Enselme
On utilise les [[Scripts_et_taches_planifiees#Tout-sauvegarder|scripts de sauvegarde créés par le club Drupal]].
56 1 Julien Enselme
57 3 Julien Enselme
h2. La purge des sauvegardes de bdd
58 1 Julien Enselme
59 3 Julien Enselme
Sur les installations d6 et d7 : toutes les semaines
60 1 Julien Enselme
61 3 Julien Enselme
Cette tâche utilise le script de [[Scripts_et_taches_planifiees#purge_des_sauvegardes.sh|purge des sauvegardes]] afin de libérer de l'espace disque en supprimant les sauvegardes de bdd les plus vieilles.
62 1 Julien Enselme
63
h1. Liste des scripts à disposition
64
65
Les scripts utilisés sont hébergés dans le répertoire bin du compte assos.
66
67
h2. all-reset-permissions.sh
68 21 Florent Torregrosa
69
<pre>
70
<code class="php">
71
#!/bin/sh
72
73
. scripts-config.sh
74
75
# This script puts the correct permissions to sites folders, settings.php and scripts.
76
77
######### drupal 6
78
for dir in `find $d6_dir_sites -type d -maxdepth 1 -mindepth 1 ! -name all ! -name images ! -name languages` ; do
79
    chmod 755 $dir
80
    chmod 400 $dir/settings.php
81
done
82
83
######### drupal 7
84
for dir in `find $d7_dir_sites -type d -maxdepth 1 -mindepth 1 ! -name all` ; do
85
    chmod 755 $dir
86
    chmod 400 $dir/settings.php
87
done
88
89
####### bin
90
chmod -R 700 $dir_scripts
91
</code>
92
</pre>
93
94 1 Julien Enselme
h2. contrib-usage.sh
95 21 Florent Torregrosa
96
<pre>
97
<code class="php">
98
#!/bin/sh
99
100
. scripts-config.sh
101
. scripts-utils.sh
102
103
# ARGS: Drupal_version, project_status, project_name
104
# List sites that have the project_name with the corresponding project_status.
105
106
check_arguments $# 3
107
108
if [ $1 = d6 ] ; then
109
    cd $d6_dir_sites
110
else
111
    cd $d7_dir_sites
112
fi
113
114
for dir in `find . -maxdepth 1 -mindepth 1 -type d ! -name all ! -name languages ! -name images` ; do
115
    # List non-core projects that correspond to the status.
116
    # Keep project_name if listed.
117
    # Count line result. 0 if not listed or 1 if listed.
118
	# Print site_dir if listed.
119
120
    cd $dir;
121
	if [ 1 -eq `drush pml --no-core --status=$2 | grep $3 | wc -l` ] ; then
122
        echo $dir; 
123
    fi
124
done
125
</code>
126
</pre>
127
128 1 Julien Enselme
h2. d6-all-drush.sh
129 21 Florent Torregrosa
130
<pre>
131
<code class="php">
132
#!/bin/sh
133
134
. scripts-config.sh
135
. scripts-utils.sh
136
137
# ARGS: drush_command
138
139
check_arguments $# 1
140
141
for dir in `find $d6_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all ! -name languages ! -name images` ; do
142
    cd $dir
143
    echo $dir
144
    drush $*
145
done
146
</code>
147
</pre>
148
149 1 Julien Enselme
h2. d6-all-dump-full.sh
150 21 Florent Torregrosa
151
<pre>
152
<code class="php">
153
#!/bin/sh
154
155
. scripts-config.sh
156
157
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
158
159
# Dump D6 database with webassos user.
160
mysqldump --single-transaction webassos -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY > $d6_dir_full_backup/webassos/$current_date.webassos.sql
161
162
# Dump D6 form database with forum user.
163
mysqldump forum -h myweb.serv.int -u forum --password=dtcAltF12 > $d6_dir_full_backup/forum/$current_date.forum.sql
164
</code>
165
</pre>
166
167 1 Julien Enselme
h2. d6-all-update-contrib.sh
168 21 Florent Torregrosa
169
<pre>
170
<code class="php">
171
#!/bin/sh
172
173
. scripts-config.sh
174
175
d6-all-drush.sh -y en update
176
# Launch cron to check for updates.
177
d6-all-drush.sh -q cron
178
179
d6-all-drush.sh cc all
180
d6-all-dump-full.sh
181
182
d6-all-drush.sh -y upc --no-core
183
d6-all-drush.sh -y updb
184
185
d6-all-drush.sh -y dis update
186
187
# Cron report.
188
d6-all-drush.sh cron
189
</code>
190
</pre>
191
192 1 Julien Enselme
h2. d6-dump-individual.sh
193 21 Florent Torregrosa
194
<pre>
195
<code class="php">
196
#!/bin/sh
197
198
. scripts-config.sh
199
200
# ARGS: auto or manual, site_prefix
201
# WARNING : backup are regularly flushed, put your backup in a safe place.
202
203
cd $dir_individual_backup
204
205
#récupération des tables du site dans le fichier liste_tables.temp
206
tables='_%'
207
liste="$1$tables"
208
209
mysql -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY -BNe "show tables like '"$liste"'" webassos | tr '\r\n' ' ' > liste_tables.temp
210
211
#transformation de cette liste en une variable
212
var=$(cat liste_tables.temp)
213
214
#sauvegarde de toutes ces tables
215
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
216
suffixe="_dump$current_date.sql"
217
fichier="$1$suffixe"
218
219
if [ $1 = 'auto' ] ; then
220
        mysqldump webassos -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY $var > $d6_dir_individual_auto_backup/$fichier
221
    else
222
        mysqldump webassos -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY $var > $d6_dir_individual_manual_backup/$fichier
223
    fi
224
225
#suppression du fichier temporaire utilisé
226
rm liste_tables.temp
227
</code>
228
</pre>
229
230 1 Julien Enselme
h2. d6-reset-variables.sh
231 21 Florent Torregrosa
232
<pre>
233
<code class="php">
234
#!/bin/sh
235
236
. scripts-config.sh
237
238
cd $d6_dir_sites
239
d6-all-drush.sh vset --always-set reverse_proxy TRUE
240
d6-all-drush.sh vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
241
drush @sites ev "variable_set('update_notify_emails', array($email_multi_assos));" --yes
242
</code>
243
</pre>
244
245 1 Julien Enselme
h2. d7-all-drush-logged.sh
246 21 Florent Torregrosa
247
<pre>
248
<code class="php">
249
#!/bin/sh
250
251
. scripts-config.sh
252
. scripts-utils.sh
253
254
# ARGS: drush_command
255
256
check_arguments $# 1
257
258
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
259
    cd $dir
260
    current_date=`date "+%Y-%m-%d_%Hh:%Mm"`
261
    echo "======$current_date======" >> $d7_dir_log/$x.log
262
    echo "Arguments are: $* " >> $d7_dir_log/$x.log
263
    drush $* >> $d7_dir_log/$x.log
264
    #To have the same caracters limit we needed 'end' that have 4 caracters, we used the Croate language for this ! LOL 
265
    echo -e "=============KRAJ=============\n" >> $d7_dir_log/$x.log
266
done
267
</code>
268
</pre>
269
270 1 Julien Enselme
h2. d7-all-drush.sh
271 21 Florent Torregrosa
272
<pre>
273
<code class="php">
274
#!/bin/sh
275
276
. scripts-config.sh
277
. scripts-utils.sh
278
279
# ARGS: drush_command
280
281
check_arguments $# 1
282
283
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
284
    cd $dir
285
    echo $dir
286
    drush $*
287
done
288
</code>
289
</pre>
290
291 1 Julien Enselme
h2. d7-all-dump-full.sh
292 21 Florent Torregrosa
293
<pre>
294
<code class="php">
295
#!/bin/sh
296
297
. scripts-config.sh
298
299
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
300
301
# Dump D7 databases at once.
302
mysqldump -h $db_server -u $db_user -pNoNo82jJ --all-databases > $d7_dir_full_backup/myassos/$current_date.d7_full.sql
303
</code>
304
</pre>
305
306 1 Julien Enselme
h2. d7-all-dump-individual.sh
307 21 Florent Torregrosa
308
<pre>
309
<code class="php">
310
#!/bin/sh
311
312
. scripts-config.sh
313
314
# ARGS: auto or manual
315
316
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
317
318
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
319
    cd $dir
320
    drush cc all
321
    if [ $1 = 'auto' ] ; then
322
        drush sql-dump --result-file="$d7_dir_individual_auto_backup/$dir/$current_date.$dir.sql"
323
    else
324
        drush sql-dump --result-file="$d7_dir_individual_manual_backup/$dir/$current_date.$dir.sql"
325
    fi
326
done
327
</code>
328
</pre>
329
330 1 Julien Enselme
h2. d7-all-releases-info.sh
331 21 Florent Torregrosa
332
<pre>
333
<code class="php">
334
#!/bin/sh
335
336
. scripts-config.sh
337
338
# List version of a module or theme that exists in sites/all/*
339
# and all versions that are available for same project on drupal.org
340
341
# modules
342
for dir in `find $d7_dir_sites/all/modules -maxdepth 1 -mindepth 1 -type d` ; do
343
    drush pm-releases $dir
344
done
345
346
# themes
347
for dir in `find $d7_dir_sites/all/themes -maxdepth 1 -mindepth 1 -type d` ; do
348
    drush pm-releases $dir
349
done
350
</code>
351
</pre>
352
353 1 Julien Enselme
h2. d7-all-reset-variables.sh
354 21 Florent Torregrosa
355
<pre>
356
<code class="php">
357
#!/bin/sh
358
359
. scripts-config.sh
360
361
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
362
    cd $dir
363
    echo $dir
364
    d7-reset-variables.sh
365
done
366
</code>
367
</pre>
368
369 1 Julien Enselme
h2. d7-all-security-review.sh
370 21 Florent Torregrosa
371
<pre>
372
<code class="php">
373
#!/bin/sh
374
375
. scripts-config.sh
376
377
# grep -v success to keep site_name and error lines.
378
bash -c 'd7-all-drush.sh security-review |& grep -v success | mail -s "Security review" $email_multi_assos'
379
</code>
380
</pre>
381
382 1 Julien Enselme
h2. d7-all-update-contrib.sh
383 21 Florent Torregrosa
384
<pre>
385
<code class="php">
386
#!/bin/sh
387
388
. scripts-config.sh
389
390
d7-all-drush.sh -y en update
391
# Launch cron to check for updates.
392
d7-all-drush.sh -q cron
393
394
d7-all-drush.sh cc all
395
d7-all-dump-individual.sh
396
397
d7-all-drush-logged.sh -y upc --no-core
398
d7-all-drush.sh -y updb
399
400
d7-all-drush.sh -y dis update
401
402
# Cron report.
403
d7-all-drush.sh cron | mail -s "Cron report: d7-all-update-contrib.sh" $email_multi_assos
404
</code>
405
</pre>
406
407 1 Julien Enselme
h2. d7-all-update-localisation.sh
408 21 Florent Torregrosa
409
<pre>
410
<code class="php">
411
#!/bin/sh
412
413
. scripts-config.sh
414
415
d7-all-drush.sh -y en l10n_update
416
d7-all-drush.sh l10n-update-refresh
417
d7-all-drush.sh l10n-update
418
d7-all-drush.sh -y dis l10n_update
419
</code>
420
</pre>
421
422 1 Julien Enselme
h2. d7-create-site.sh
423 21 Florent Torregrosa
424
<pre>
425
<code class="php">
426
#!/bin/sh
427
428
. scripts-config.sh
429
. scripts-config-site.sh $1
430
. scripts-utils.sh
431
432
# ARGS: site name
433
434
######## Exceptions
435
check_arguments $# 1
436
437
# "-" is forbidden because it provokes database error.
438
if `echo $1 | grep -` ; then
439
    echo '"-" is forbidden in the site name'
440
    exit 1
441
fi
442
443
# Site name length must be lower or equal to 16 due to database limitations.
444
if [ $(echo $1 | wc -n) -le 16 ] ; then
445
    echo "site name can't have more than 16 characters"
446
    exit 1
447
fi
448
449
###### Initialisation
450
cd $d7_dir
451
db_password=`ask_password_db $db_server $db_user`
452
site_password=`gen_password`
453
454
# Check if site database already exists.
455
if mysql -h $db_server -u $db_user -e "USE $d7_site_name" -p$db_password 2>/dev/null ; then
456
    echo "Database $d7_site_name already exists"
457
    exit 1
458
fi
459
460
# Check if site folder already exists.
461
if [ -d $d7_site_dir ] ; then
462
    echo "Folder $d7_site_dir already exists"
463
    exit 1
464
fi
465
466
###### Main
467
mkdir $d7_site_dir
468
469
# Backup requirements
470
mkdir $d7_dir_individual_auto_backup/$d7_site_name
471
mkdir $d7_dir_individual_manual_backup/$d7_site_name
472
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
473
474
touch $d7_dir_individual_auto_backup/$d7_site_name/$current_date.sql
475
touch $d7_dir_individual_auto_backup/$d7_site_name/$current_date.sql
476
touch $d7_dir_individual_auto_backup/$d7_site_name/$current_date.sql
477
478
# Create and grant privileges on database
479
mysql -h $db_server -u $db_user -e "CREATE DATABASE $d7_site_name" -p$db_password
480
mysql -h $db_server -u $db_user -e "GRANT ALL PRIVILEGES ON $d7_site_name.* TO '$d7_site_name'@'%' IDENTIFIED BY '$site_password'" -p$db_password
481
482
# Create settings.php
483
sed "s/\%\%DBUSER\%\%/$d7_site_name/ ; s/\%\%DBNAME\%\%/$d7_site_name/ ; s/\%\%DBPASS\%\%/$site_password/ ; s/\%\%nomsite\%\%/$d7_site_name/" < $d7_settings_template > $d7_site_settings
484
485
# Create symbolic link
486
cd $d7_dir
487
ln -s . $d7_site_name
488
489
# Next Instructions
490
echo "Go to http://assos.centrale-marseille.fr/$d7_site_name/install.php to continue."
491
echo "Press enter when ready to go on."
492
read key
493
494
# Init variables
495
d7-reset-variables.sh $d7_site_name
496
497
# Permissions
498
chmod -R 755 $d7_site_dir
499
chmod 400 $d7_site_settings
500
501
# Last instructions
502
echo "Last instructions:"
503
echo "- Advice the webmaster to close account creation on the website"
504
echo "- Give the webmaster a link to the club Drupal's tutorials "
505
echo "- Create a node of type \"Site\" on default"
506
echo "- Register the webmaster on webmasters@listes.centrale-marseille.fr"
507
</code>
508
</pre>
509
510 1 Julien Enselme
h2. d7-delete-site.sh
511 21 Florent Torregrosa
512
<pre>
513
<code class="php">
514
#!/bin/sh
515
516
. scripts-config.sh
517
. scripts-config-site.sh $1
518
. scripts-utils.sh
519
520
# ARGS: site name.
521
522
check_arguments $# 1
523
524
db_password=`ask_password_db $db_server $db_user`
525
526
# Delete database.
527
mysql -h $db_server -u $db_user -p$db_password -e "IF EXISTS DROP DATABASE $d7_site_name"
528
529
# Delete MYSQL user.
530
mysql -h $db_server -u $db_user -p$db_password -e "DROP USER '$d7_site_name'@'%'"
531
532
# Delete site's folder.
533
chmod -R 700 $d7_site_dir
534
rm -r $d7_site_dir
535
536
# Delete symbolic link.
537
rm $d7_dir/$d7_site_name
538
539
# Delete database backups.
540
rm -r $d7_dir_individual_auto_backup/assos.centrale-marseille.fr.$d7_site_name
541
rm -r $d7_dir_individual_manual_backup/assos.centrale-marseille.fr.$d7_site_name
542
543
echo "Don't forget to:"
544
echo "- Refresh node site on default"
545
echo "- Check particular behavior (normally detailed on site node)"
546
</code>
547
</pre>
548
549 1 Julien Enselme
h2. d7-reset-variables.sh
550 21 Florent Torregrosa
551
<pre>
552
<code class="php">
553
#!/bin/sh
554
555
. scripts-config.sh
556
557
# ARGS: [site_name]
558
559
if [ ! -z $1 ] ; then
560
    . scripts-config-site.sh $1
561
    cd $d7_site_dir
562
fi
563
564
current_timestamp=`date "+%s"`
565
566
####### General variables
567
drush -y vset --always-set reverse_proxy TRUE
568
drush -y vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
569
drush -y ev "variable_set('update_notify_emails', array($email_multi_assos));"
570
drush -y vset error_level 0
571
572
###### Hidden captcha
573
drush -y en hidden_captcha
574
# Log wrong answers.
575
drush -y vset captcha_log_wrong_responses 1
576
# Use hidden captcha for all forms.
577
drush -y sqlq --db-prefix "UPDATE {captcha_points} SET module = 'hidden_captcha', captcha_type = 'Hidden CAPTCHA' WHERE module is NULL;"
578
# Flush captcha cache.
579
drush -y vdel captcha_placement_map_cache
580
# Randomely generate a math question as the label of the hidden captcha field.
581
drush -y vset hidden_captcha_label "$RANDOM + $RANDOM"
582
583
584
####### Piwik
585
drush -y en piwik
586
drush -y vset piwik_site_id "101"
587
drush -y vset piwik_url_http "http://piwik.centrale-marseille.fr/"
588
drush -y vset piwik_url_https "https://piwik.centrale-marseille.fr/"
589
# Piwik cache.
590
drush -y vset piwik_cache 1
591
drush -y vset piwik_visibility_roles "1"
592
# Anonymous and authenticated statistics.
593
drush -y vset --format=json piwik_roles '{"1":0,"2":0}'
594
drush -y vset piwik_page_title_hierarchy 1
595
# Activate local search.
596
drush -y vset piwik_site_search 1
597
598
599
###### Security review
600
# For untrusted roles:
601
# 1 : anonymous user
602
# 2 : authenticated user
603
# 3 : administrator
604
drush -y en security_review
605
drush -y ev "variable_set('security_review_untrusted_roles', array('1'));"
606
# Security review can't check for files permissions on multi_assos.
607
drush -y sqlq --db-prefix "UPDATE {security_review} SET skip = '1', skiptime = $current_timestamp, skipuid= '1' WHERE reviewcheck IN ('file_perms');"
608
drush -y sqlq --db-prefix "UPDATE {security_review} SET skip = '0', skiptime = 0, skipuid= NULL WHERE reviewcheck NOT IN ('file_perms');"
609
</code>
610
</pre>
611
612 1 Julien Enselme
h2. delete-temporary-files.sh
613 21 Florent Torregrosa
614
<pre>
615
<code class="php">
616
#!/bin/sh
617
618
. scripts-config.sh
619
620
find $dir_multi_assos -name '*~' -delete
621
</code>
622
</pre>
623
624 1 Julien Enselme
h2. disk-usage.sh
625 21 Florent Torregrosa
626
<pre>
627
<code class="php">
628
#!/bin/sh
629
630
. scripts-config.sh
631
632
echo -e "Quotas: 9.1 GB\n"
633
634
echo "Assos:"
635
du -hcs $dir_multi_assos | grep total
636
echo -e "\n"
637
638
echo "D6:"
639
cd $d6_dir_sites
640
du -h -d 1
641
echo -e "\n"
642
643
echo "D7:"
644
cd $d7_dir_sites
645
du -h -d 1
646
echo -e "\n"
647
648
echo "Logs:"
649
du -hcs $dir_log | grep total
650
echo -e "\n"
651
652
echo "Backups:"
653
cd $dir_backup
654
du -h -d 2
655
</code>
656
</pre>
657
658 1 Julien Enselme
h2. flush-files.sh
659 21 Florent Torregrosa
660
<pre>
661
<code class="php">
662
#!/bin/sh
663
664
# ARGS: number of files to keep, email address
665
# usage: flush files from a folder except a number equal to argument.
666
667
# Check if scripts-config.sh is imported.
668
if [ -z $scripts_utils ] ; then
669
    echo "Import of scripts-utils.sh required."
670
    exit 1
671
fi
672
673
check_arguments $# 2
674
675
backups_number=`ls | wc -l`
676
let "number_of_backups_to_delete = backups_number - $1"
677
678
if [ $number_of_backups_to_delete -gt 0 ] ; then
679
    ls | head -$number_of_backups_to_delete | xargs rm
680
else
681
    dir=`pwd`
682
    echo "There are not enough files in $dir to Flush it. Check if backup script works fine." | mail -s "[db] $dir has a backup problem" $2
683
fi
684
</code>
685
</pre>
686
687 1 Julien Enselme
h2. flush-full-databases-backups.sh
688 21 Florent Torregrosa
689
<pre>
690
<code class="php">
691
#!/bin/sh
692
693
. scripts-config.sh
694
695
# ARGS: Drupal version
696
697
cd $dir_full_backup/$1
698
699
for dir in `ls` ; do
700
    cd $dir
701
    flush-files.sh $db_full_backup_number $email_multi_assos
702
done
703
</code>
704
</pre>
705
706 1 Julien Enselme
h2. flush-individual-databases-backups.sh
707 21 Florent Torregrosa
708
<pre>
709
<code class="php">
710
#!/bin/sh
711
712
. scripts-config.sh
713
714
# ARGS: manual or auto, Drupal version
715
716
cd $dir_individual_backup/$1/$2
717
718
for dir in `ls` ; do
719
    cd $dir
720
    if [ $1 = 'auto' ] ; then
721
        flush-files.sh $db_individual_auto_backup_number $email_multi_assos
722
    else
723
        flush-files.sh $db_individual_manual_backup_number $email_multi_assos
724
    fi
725
done
726
</code>
727
</pre>
728
729 1 Julien Enselme
h2. scripts-config-site.sh
730 21 Florent Torregrosa
731
<pre>
732
<code class="php">
733
#!/bin/sh
734
735
# Sets useful variables of a site.
736
# ARGS: site_name
737
# Requires scripts-config.sh
738
739
# Check if scripts-config.sh is imported.
740
if [ -z $scripts_config ] ; then
741
    echo "Import of scripts-config.sh required."
742
    exit 1
743
fi
744
745
if [ -z $1 ] ; then
746
    echo "This script needs a site name as argument."
747
    exit 1
748
fi
749
750
scripts_config_site='imported'
751
752
d7_site_name=$1
753
d7_site_dir="$d7_dir_sites/assos.centrale-marseille.fr.$d7_site_name"
754
d7_site_settings="$d7_site_dir/settings.php"
755
</code>
756
</pre>
757
758 1 Julien Enselme
h2. scripts-config.sh
759 21 Florent Torregrosa
760
<pre>
761
<code class="php">
762
#!/bin/sh
763
764
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/users/guest/assos/bin
765
PATH=$PATH:/usr/guest/assos/bin
766
767
scripts_config='imported'
768
769
email_multi_assos="assos@centrale-marseille.fr"
770
771
dir_multi_assos='/users/guest/assos'
772
dir_scripts="$dir_multi_assos/bin"
773
dir_template="$dir_multi_assos/Desktop"
774
775
###### Database
776
db_server="myassos.serv.int"
777
db_user="assos"
778
dir_log="$dir_multi_assos/log"
779
780
###### Backup
781
db_full_backup_number=3
782
db_individual_manual_backup_number=3
783
db_individual_auto_backup_number=3
784
785
dir_backup="$dir_multi_assos/backup"
786
dir_full_backup="$dir_backup/full"
787
dir_individual_backup="$dir_backup/individual"
788
dir_individual_manual_backup="$dir_individual_backup/manual"
789
dir_individual_auto_backup="$dir_individual_backup/auto"
790
791
792
###### D7 variables
793
d7_dir="$dir_multi_assos/htmltest"
794
d7_dir_sites="$d7_dir/sites"
795
796
### Log
797
d7_dir_log="$dir_log/d7"
798
799
### Backup
800
d7_dir_full_backup="$dir_full_backup/d7"
801
d7_dir_individual_manual_backup="$dir_individual_manual_backup/d7"
802
d7_dir_individual_auto_backup="$dir_individual_auto_backup/d7"
803
804
### Template
805
d7_settings_template_name="settings-D7-bddinde-template.php"
806
d7_settings_template="$dir_template/$d7_settings_template_name"
807
808
809
###### D6 variables
810
d6_dir="$dir_multi_assos/html"
811
d6_dir_sites="$d6_dir/sites"
812
813
### Backup
814
d6_dir_full_backup="$dir_full_backup/d6"
815
d6_dir_individual_manual_backup="$dir_individual_manual_backup/d6"
816
d6_dir_individual_auto_backup="$dir_individual_auto_backup/d6"
817
</code>
818
</pre>
819
820 1 Julien Enselme
h2. scripts-utils.sh
821 21 Florent Torregrosa
822
<pre>
823
<code class="php">
824
#!/bin/sh
825
826
# This script contains useful functions for other scripts.
827
828
# Check if scripts-config.sh is imported.
829
if [ -z $scripts_config ] ; then
830
    echo "Import of scripts-config.sh required."
831
    exit 1
832
fi
833
834
scripts_utils='imported'
835
836
ask_password() {
837
    # read -s doesn't work with sh.
838
    # usage: pass=`ask_password "password please:"`
839
    echo $1 >&2
840
    echo -n ">" >&2
841
    stty_avant=`stty -g`
842
    stty -echo
843
    read p
844
    stty $stty_avant
845
    echo "$p"
846
    unset p
847
}
848
849
ask_password_db() {
850
    # ARGS: server_name, user_name
851
    local db_password="pour_boucler"
852
    # empty db request to validate password
853
    while ! mysql -h $1 -u $2 -p$db_password -e "" 2>/dev/null ; do
854
        db_password=`ask_password "database password:"`
855
        echo ""
856
    done
857
}
858
859
generate_password(){
860
    # ARGS: [password_length]
861
    # The password contains special characters. '/' must be excluded to avoid sed malfunction.
862
863
    local site_password='/'
864
865
    if [ -z $1 ] ; then
866
        local password_length=20
867
    else
868
        local password_length=$1
869
    fi
870
    
871
    while echo "$site_password" | grep -Fq '/' ; do
872
        site_password=`dd if=/dev/urandom count=1 | uuencode -m - | head -n 2 | tail -n 1 | cut -c-$password_length`
873
    done
874
875
    echo $site_password
876
}
877
878
count_d7_sites(){
879
    find $d7_dir_sites -type d ! -name all -maxdepth 1 | wc -l
880
}
881
882
check_arguments() {
883
    # ARGS: number of arguments passed to script, number of arguments required
884
    if [ $1 -le $2  ] ; then
885
        echo "Number of arguments insuffisant."
886
        exit 1
887
    fi
888
}
889 11 Julien Enselme
</code>
890
</pre>