Mettre à jour un crontab pour tarer les fichiers nouveaux / mis à jour toutes les 5 heures
J'essaie de créer une commande pour un crontab pour tarer tous les fichiers nouveaux / mis à jour (à partir de la dernière exécution du cron). Le cron doit s'exécuter toutes les 5 heures.
- Je souhaite sauvegarder tous les fichiers contenus dans le dossier,
/home/swayraines
y compris son sous-dossier - Je veux enregistrer un tar avec ces fichiers ici
folder/backup/back.tar
- Le crontab doit fonctionner toutes les 5 heures
- Seuls les fichiers qui ont été ajoutés ou modifiés depuis la dernière exécution du cron doivent être ajoutés à l'archive. Donc, à moins qu'il ne soit nouveau / modifié, il ne devrait pas être enregistré.
- Je veux enregistrer le résultat dans un journal avec à la fois stdout et stderr ici
folder/backup/backlog.log
J'ai donc pensé que la meilleure façon de procéder était de consulter find
les fichiers ajoutés / modifiés au cours des 5 dernières heures, puis tar
ces fichiers, avant de sortir stdout et stderr dans un .log mais cela ne fonctionne pas et je ne suis pas sûr de ce qui ne va pas.
Voici à quoi cela ressemble jusqu'à présent (mis à jour pour inclure une réponse partielle):
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
update Le problème est qu'en ce moment, il crée une nouvelle archive tar à chaque fois que la crontab s'exécute, et l'archive ne contient que le dernier fichier ajouté.
update 2 Juste pour être clair, j'ai d'abord déclaré que je voulais créer une nouvelle archive toutes les 5 heures, mais plutôt je veux mettre à jour l'archive et ajouter uniquement les nouveaux fichiers. Je crois donc que je dois changer la commande tar en -uvf
?
Réponses
Utilisez des nombres signés pour l'argument. 300 signifie modifié il y a exactement 300 minutes. -300 est il y a moins de 300 minutes. +300 serait il y a plus de 300 minutes.
MISE À JOUR 1
L'argument à -exec
doit se terminer par \;
, comme ceci:
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
Cela fonctionnera sans problème, mais comme il exécute la commande sur 1 fichier à la fois, vous vous retrouverez avec seulement le dernier fichier sur lequel il opère compressé dans le fichier tar . Je vous suggère d'écrire la commande pour copier les fichiers dans un répertoire temporaire, compresser le répertoire temporaire, puis supprimer le répertoire temporaire.
MISE À JOUR 2
Correct. Vous pouvez utiliser -r --append
ou -u --update
si vous souhaitez ajouter des fichiers modifiés à la fin du fichier tar , mais le fichier tar devra d'abord être créé. Il ne créera pas le fichier s'il n'existe pas. Il est important de noter que ces commandes n'écrasent pas la version précédente, par conséquent, si vous n'avez pas besoin des deux versions, vous devez d' --delete
abord utiliser puis ajouter la nouvelle version.
Notez également que ce ne sera pas un fichier tar compressé . Vous ne pouvez pas mettre à jour les fichiers tar compressés sans décompresser / recompresser. C'est pourquoi vous ne pouvez pas combiner les options -z
et -ur
.