walk-hoary

Messages étiquettés script

Compressez vos photos et videos sorties de votre APN

Si comme moi votre appareil photo numérique ne compresse pas beaucoups vos photos, encore moins vos videos ? Voici une solution faisant appel à un script maison :  La recompression en masse des photos jpeg placeés en paramètres.

Compresser des photos en masse

Ce script vous coutera l’installation des paquets jhead et libjpeg-progs sous Ubuntu

script  compress-images.sh

#!/bin/bash
test -f compress1imagePerteExif.sh
if [ ! $? -eq 0 ]
then
echo "Il vous manque le fichier compress1imagePerteExif.sh dans le repertoire courant"
exit 2
fi
while read line
do
echo COMPRESSION DE "$line" .....
ls -l "$line"
jhead -cmd "./compress1imagePerteExif.sh &i" "$line"
ls -l "$line"
echo --------------------------
echo `date` $line >> images-compressees.txt
done

script compress1imagePerteExif.sh

#!/bin/sh
djpeg "$1" | cjpeg -quality 50 -optimise -progressive > "$1"bak
mv "$1"bak "$1"

Voilà !! Usage du script en 2 étapes :

Notez les chemins de vos photos à compresser dans un fichier

find . | grep jpg$ > maliste.txt

Compressez vos fichiers

cat maliste.txt | ./compress-images.sh

Voilà, la compression prendre 1 à 3s par photos généralement.

Pour les vidéos c’est largement plus simple

L’encodage en 2 pass vous nécéssitera mencoder.

Script compress-videos.sh

#!/bin/bash
while read line
do
echo COMPRESSION DE "$line" ..... \
ls -l "$line"
rm divx2pass.log
mencoder -oac mp3lame -ovc xvid -xvidencopts pass=1 -o /dev/null "$line"
mencoder -oac mp3lame -ovc xvid -xvidencopts pass=2:bitrate=800 -o "$line".avi "$line"
rm divx2pass.log
rm "$line"
ls -l "$line".avi
echo --------------------------
echo `date` $line >> videos-compressees.txt
done

L’usage est le même.

Tags: , ,

Comment sauvegarder votre serveur ?

Posséder ou gérer un serveur c’est bien, mais en oublier ses sauvegardes c’est mal !

Je vous propose ici une méthode pour faire des sauvegardes complètes et incrémentales très simples pour vos données. Je vous parlerais de la sauvegarde du système par la suite.

Que sauvegarder ?

On va s’occuper uniquement des données modifiables par vous et vos application, je parle bien sûr de vos scripts, bases de données et tout ce qui est hors système.

Quand sauvegarder ?

Cela va dépendre de la vitesse de changement de vos données, il va de soi que nous n’aurons pas besoin d’une sauvegarde toute les heures pour un site personnel.
Personnellement, j’estime à 2 heures de perte maximum pour mes bases de données et 24H pour les fichiers.

Où sauvegarder ?

Sauvegarder sur la même machine n’a qu’un intérêt très limité, en cas d’erreur humaine sur la machine ou accident matériel, nous perdons la machine et ses sauvegardes.
Il est donc important de placer ses sauvegardes sur un support géographiquement décalé par rapport à la machine à sauvegarder.

De quel façon sauvegarder ?

Nous utiliserons ssh pour réaliser nos transferts d’un serveur à l’autre. Le serveur de sauvegarde lancera de lui même les opérations par tache cron.

Nous allons dans cette exemple faire une sauvegarde par jour, et conserver les sauvegardes des 2 derniers jours, 2 dernières semaines, et 2 derniers mois.
Le principe est simple et a déjà fait ses preuves, nous utilisons les hardlinks :

  1.  On imagine que une sauvegarde de la veille existe déjà sur le serveur des sauvegardes.
  2. On déplace la sauvegarde de la veille dans « backup_J-1 »
  3. On duplique ce répertoire avec des hardlinks, notre copie sera donc très légère par rapport à une sauvegarde complète, mais tout le fichiers sont présents.
  4. On synchronise cette copie avec la machine à sauvegarder

Pour les bases de données, j’utilise un script qui crée une archive par base de données ; le script a la faculté de découvrir toutes les bases de l’utilisateur employé.

Le script

Voici mon script lancé une fois par jour :
#!/bin/shdirbackups='/home/user/backups'
dirtoarchive='user@machine:/home/linuxquimp'
targetdumps=$dirbackups/day-1/mysql
bdduser=user_bdd
bddpass='pass_bdd'
bddhost='machine'

#Deplacement des archives
mv $dirbackups/day-3 $dirbackups/day-3-deleted
rm -rf $dirbackups/day-3-deleted
mv $dirbackups/day-2 $dirbackups/day-3
mv $dirbackups/day-1 $dirbackups/day-2
mv $dirbackups/day $dirbackups/day-1

# Creation de la copie de day-1/ sur day/
mkdir -p $dirbackups/day
cp -al $dirbackups/day-1/* $dirbackups/day/
rm -rf $dirbackups/day/mysql

# Synchronisation
rsync --delete --stats --rsync-path=/home/user/cron/rsync-2.6.9/rsync $dirtoarchive/ $dirbackups/day

databases=(`echo 'show databases;' | mysql -h $bddhost -u $bdduser --password=$bddpass | grep -v ^Database$`)
test -d $targetdumps || mkdir -p $targetdumps
for d in "${databases[@]}"; do
if [[ $d != 'tmp' && $d != 'test' && $d != 'information_schema' ]]
then
mysqldump --host=$bddhost --user=$bdduser --password=$bddpass --quick --add-drop-table --all ${d} | gzip > $targetdumps/${d}.sql.gz
fi
done

Rien de ne vous empeche d’utiliser la partie qui sauvegarde les bases de données dans un cron lancé plusieurs fois par jour/ par heure.

Je pense que vous aurez compris qu’il faille aussi toute les semaines et tout les mois lancer les autres scripts qui permettent de deplacer les backups dans les bons repertoires.

Toute les 2 heures :
#!/bin/sh

dirtoarchive='user@machine:/home/linuxquimp'
targetdumps=$dirbackups/day/mysql
bdduser=user_bdd
bddpass='pass_bdd'
bddhost='machine'

databases=(`echo 'show databases;' | mysql -h $bddhost -u $bdduser --password=$bddpass | grep -v ^Database$`)
ladate=(`date +%F_%H-%M-%S`)
test -d $targetdumps || mkdir -p $targetdumps
for d in "${databases[@]}"; do
if [[ $d != 'tmp' && $d != 'test' && $d != 'information_schema' ]]
then
mysqldump --host=$bddhost --user=$bdduser --password=$bddpass --quick --add-drop-table --all ${d} | gzip > $targetdumps/${d}_$ladate.sql.gz
fi
done

Toute les semaines avant le backup du jour :
Dans ce script je supprime les dumps mysql faits chaque heure
#!/bin/sh
dirbackups='/home/user/backups'

# deplacement des archives

rm $dirbackups/week-2
mv $dirbackups/week-1 $dirbackups/week-2
mv $dirbackups/day-3 $dirbackups/week-1

#Suppression des dump horaires database
#rm -rf $dirbackups/week-1/mysql
rm $dirbackups/week-1/mysql/*_*-*-*_*-*-*.sql.gz

Tous les mois avant le backup de la semaine :
#!/bin/sh
dirbackups='/home/user/backups'

#deplacement des archives
mv $dirbackups/month-3 $dirbackups/month-3-deleted
rm -rf $dirbackups/month-3-deleted
mv $dirbackups/month-2 $dirbackups/month-3
mv $dirbackups/month-1 $dirbackups/month-2
mv $dirbackups/week-2 $dirbackups/month-1

Il y a surement des erreurs mais le principe est là… 😉

Tags: , , , , ,

Je n'aime pas les boîtes noires.