Bonjour,
J'ai petit soucis avec find et ctime, je vous explique.
2 dumps d'une base postgres sont exécutés tous les jours, un a 2h00 du matin l'autre a midi.
y'a un bout de script simple qui vérifie que le dump s'est déroulé correctement et si c'est le cas efface le fichier de dump le plus ancien avant de placer le nouveau dans le bon répertoire
FILE=db_test.`date +\%d.\%m.\%Y`.dump
pg_dump --file=$2 --format=c --compress=$PGCOMPRESSIONLEVEL --schema=test --schema=public $1
if [ $? = 0 ]
then
find /var/backups/dump -type f -ctime 0.65 -exec rm -f {} \;
mv /var/backups/dump_tmp/$FILE /var/backups/dump
else
mv /var/backups/dump_tmp/$FILE /var/backups/dump/$FILE.ERROR
fi
exit 0
le problème que je rencontre est que quand le script de dump de 2h00 s'exécute, il conserve bien le dump généré à midi la veille et efface celui de 2h00 de la veille, je me retrouve avec 2 dumps…celui de midi de la veille et celui qui vient d'être générer…c'est ce que je veux.
mais quand celui de midi s'exécute il efface les 2, je voudrais qu'il ne m'efface que celui de midi de la veille et conserver celui de 2h00.
Je me retrouve qu'avec celui qui vient d'être générer…j'ai essayer pas mal de d'ajustement de ctime avec toujours le même résultat.
J'espère que c'est assez claire pour avoir un petit coup main car là je m'arrache les cheveux.
Merci à vous.
# Problème find avec ctime
Posté par heinquoi . Évalué à 1. Dernière modification le 02 novembre 2014 à 18:19.
bonjour,
tu mets
-ctime 0.65
d’après man find, pour sélectionner tout ce qui est plus ancien que la valeur indiqué tu devrais mettre:
-ctime +0.65
A noter que chez moi je dois mettre 0,65 (virgule) mes locale étant en fr:
Ensuite 0,65*24=15,6 soit 15h
je sais pas trop comment find réagit avec les nombres a virgules et les arrondis qu'il réalise. Pourquoi ne pas utilisé -cmin qui semble fait pour ton cas.
-cmin +960
Est ce que ça t'aide ?
[^] # Re: Problème find avec ctime
Posté par NeoX . Évalué à 2. Dernière modification le 02 novembre 2014 à 18:28.
outre la piste evoquée ci-dessus, pourquoi ne pas simplement jouer du ctime X (X etant le nombre de fois 24h)
dans ton cas tu prend des virgules donc des portions de 24h.
avec un backup à 2h du mat, le suivant à 12h, le suivant à 2h le lendemain,
suffit de lui demander d'effacer le
--ctime +1
pour qu'à midi il efface celui de la veille, et à 2h du matin celui de 24h avant.sinon pour tes fichiers, penses à utiliser la notation inversée Année-mois-jour.
Pourquoi ?
parce que sinon tu vas avoir tous les fichiers du 20 du mois, puis tous les fichiers du 21 de chaque mois
et quand tu feras un
ls -l
dans le dossier tu verras :avec la notation inversée, tu auras 'naturellement' la presentation suivante :
evidemment dans le cas present, vu que tu ne gardes que le dernier fichier, cela a peu d'importance, mais si tu en gardes plus, c'est bien de prendre de bonnes habitudes.
[^] # Re: Problème find avec ctime
Posté par Rubbick . Évalué à 1.
Bonjour,
Merci tout d'abord pour vos réponses et le petit conseil qui va avec.
Malheureusement je n'ai toujours pas résolu mon pb et je vous avoue que le comportement est vraiment curieux ou y'a un truc qui m'échappe.
toujours le même pb.
Je me suis dit ok je vais me baser sur "atime", pour tester j'ai créer 2 fichiers avec touch.
XXX:/var/backups/aurion/dump#touch -at 11030200 test-2H
XXX:/var/backups/aurion/dump# stat test-2H
File: `test-2H'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: ca11h/51729d Inode: 1056770 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-11-03 02:00:00.000000000 +0100
Modify: 2014-11-03 13:44:08.000000000 +0100
Change: 2014-11-03 13:44:08.000000000 +0100
XXX:/var/backups/aurion/dump#touch -at 11021200 test-12H
XXX:/var/backups/aurion/dump# stat test-12H
File: `test-12H'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: ca11h/51729d Inode: 1056771 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-11-02 12:00:00.000000000 +0100
Modify: 2014-11-03 13:46:24.000000000 +0100
Change: 2014-11-03 13:46:24.000000000 +0100
Birth: -
Quand je test manuellement ma commande "find", il trouve bien que le fichier test-12H
XXX:~# find /var/backups/aurion/dump -type f -atime 0.65
/var/backups/aurion/dump/test-12H
mais quand il est exécuté dans le script , il m'efface tout !!!
je vous remet le bout de script, y'a pas plus simple en plus….comprends pas !!
if [ $? = 0 ]
then
find /var/backups/aurion/dump -type f -atime 0.65 -exec rm -f {} \;
mv /var/backups/aurion/dump_tmp/$FILE /var/backups/aurion/dump
else
mv /var/backups/aurion/dump_tmp/$FILE /var/backups/aurion/dump/$FILE.ERROR
Je suis sous Debian Wheezy.
Merci./
```
# c'est compliqué
Posté par fearan . Évalué à 2.
Si l'idée est de garder les deux précédents, je ferai autrement
ps : je ne fais que du bash, si ça ne passe pas en dash/sh/ksh/tcsh/zsh, je décline toute responsabilité ;)
pps : ça ne passe pas en dash
ppps : ça peut se régler à coup de ls -t | ( read … )
pppps : il y a surement plus élégant ;)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: c'est compliqué
Posté par Rubbick . Évalué à 1.
Bonjour,
Merci d'avoir pris le temps de répondre mais ce n'est pas tout à fait ce que je cherche à faire.
je cherche a supprimer le plus ancien et a conserver l'intermediaire.
pour résumé
un dump se lance tous les jours à:
2h00 (du mat')
12h00 (midi)
2h00
12h00
2h00
12h00
..etc
je cherche a faire une rotation, quand celui de 2h00 est terminée, il efface celui de 2h00 la veille en gardant celui de 12h00 et la même pour celui de 12h00.
Vous trouverez plus de détails sur l'étrange fonctionnement que je rencontre dans mes précédents posts.
Merci a vous./
```
[^] # Re: c'est compliqué
Posté par fearan . Évalué à 2.
rien de très sorcier à adapter ;)
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
# Pas compliqué ...en effet !!
Posté par Rubbick . Évalué à 1.
Oui en effet :) Merci a toi.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.