C'est le script que j'utilise:
find /path/backups/ -type f -mtime -2 -printf '%P\n' | rsync -avz --progress --delete --exclude-from=- -e "ssh -p 512" /path/backups/ me@Host:/remote/path/server-backups/
Ceci est tiré du journal:
> Jan 21 15:32:01 servername CRON[14654]: (serveruser) CMD (find /path/backups/ -type f -mtime -2 -printf ')
J'ai essayé d'utiliser cron.d
, crontab -e
et cron.daily
. Placer le script directement dans le fichier crontab
et appeler un fichier de script .sh
. Avez-vous des idées pour résoudre ce problème?
La commande est tronquée car %
a une signification particulière dans cron
. De man 5 crontab
:
The ``sixth'' field (the rest of the line) specifies the command to be
run. The entire command portion of the line, up to a newline or %
character, will be executed by /bin/sh or by the Shell specified in the
Shell variable of the crontab file. Percent-signs (%) in the command,
unless escaped with backslash (\), will be changed into newline charac‐
ters, and all data after the first % will be sent to the command as
standard input. There is no way to split a single command line onto
multiple lines, like the Shell's trailing "\".
ce qui explique pourquoi la commande enregistrée ressemble à quelque chose comme:
CMD (find /home/steeldriver/forums/tests -type f -mtime +1 -printf ')
Pour démontrer que l'évasion fonctionne, étant donné:
$ ls -l tests
total 12
-rw-rw-r-- 1 steeldriver steeldriver 0 Jan 22 14:22 A8eVAmK.txt
-rw-rw-r-- 1 steeldriver steeldriver 22 Oct 27 22:18 A9E27.txt
-rw-rw-r-- 1 steeldriver steeldriver 10 Oct 27 22:19 ffn2eG6.txt
-rw-rw-r-- 1 steeldriver steeldriver 43 Jan 22 14:22 sBHFgkv.txt
Puis en ajoutant la crontab en tant que:
* * * * * find /home/steeldriver/forums/tests -type f -mtime +1 -printf '\%P\0' | rsync -0av --exclude-from=- /home/steeldriver/forums/tests/ /home/steeldriver/forums/newtests/ 2>&1 > /home/steeldriver/forums/backup.log
(notez que ceci utilise la forme à zéro terminal \0
]) génère le fichier journal:
$ cat backup.log
sending incremental file list
created directory /home/steeldriver/forums/newtests
./
A8eVAmK.txt
sBHFgkv.txt
sent 250 bytes received 113 bytes 726.00 bytes/sec
total size is 43 speedup is 0.12
indiquant que la sauvegarde s'est exécutée avec succès et n'a copié que les fichiers les plus récents:
$ ls -l newtests
total 4
-rw-rw-r-- 1 steeldriver steeldriver 0 Jan 22 14:22 A8eVAmK.txt
-rw-rw-r-- 1 steeldriver steeldriver 43 Jan 22 14:22 sBHFgkv.txt
Notez que vous ne pourrez pas tester l'échappement en dehors de votre crontab - dans le terminal, cela entraînera une erreur defind
.
Je suggère une approche alternative. L'utilisation de fichiers temporaires peut vous simplifier la vie et vous évitera d'utiliser des pipes qui peuvent causer des problèmes avec les tâches cron.
Le processus est assez simple. D'abord donner la commande
find ./ -daystart -mtime +2 >myfile
Remarque:
Ce qui précède correspond aux fichiers âgés de 2 à 3 jours car il utilise des jours entiers. * Modifiez-le si nécessaire ou utilisez -mmin et minutes pour une sélection plus précise. Les résultats correspondants seront écrits dans le fichier myfile qui sera écrasé à chaque exécution de la commande.
Exécutez ensuite la commande: sed 's|./||' myfile >EXCL_list
pour supprimer le préfixe inutile. Le fichier EXCL_list sera écrasé à chaque exécution de la commande.
Enfin, lancez la commande:
rsync -Pav --exclude-from=EXCL_list --delete-excluded source/ dest
Explication des commutateurs rsync:
-P
identique à --partial --progress
-a
mode d'archivage
-v
verbeux
--exclude-from=EXCL_list
lire les motifs d'exclusion à partir du fichier
--delete-excluded
supprime également les fichiers exclus des répertoires de destination
pour des informations plus détaillées et des options supplémentaires, voir man rsync
Hypothèses:
Les commandes sont exécutées dans le répertoire source contenant les fichiers et les dossiers à traiter.
dest dans la commande rsync est une destination montée sur laquelle vous êtes autorisé à écrire.
En espérant que cela aide.
Sources:
http://www.linuxquestions.org/questions/linux-general-1/rsync-only-60-day-old-files-580357
https://serverfault.com/questions/279609/what-exactly-will-delete-excluded-do-for-rsync
man find
man rsync