GNU/Linux >> Tutoriels Linux >  >> Linux

faire un cronjob attendre que le travail rsync précédent se termine

Solution 1 :

Vous pouvez implémenter une sorte de verrouillage. Cela imprimera le nombre de processus rsync toujours en cours :

pgrep -cx rsync

Et cela n'exécutera le rsync que si aucun autre processus rsync n'existe :

pgrep -cx rsync || rsync ...

Utilisation de -x empêchera de faire correspondre accidentellement des noms indésirables (par exemple "foobarsync hronizator" ou "not_an_rsync _totalement" - cela fonctionne exactement comme pgrep -c ^rsync$ )

Solution 2 :

Vous pouvez utiliser la commande flock pour vous aider à le faire, par exemple. Dans ce cas flock -n est probablement ce que vous voulez car cela entraînera un échec immédiat de la commande s'il ne peut pas obtenir le verrou, par exemple

30 * * * *  /usr/bin/flock -n /tmp/myRsyncJob.lck /path/to/your/rsyncScript 

Solution 3 :

Voici ce que je ferais. Créez un script wrapper autour du rsync pour créer un fichier de verrouillage.

script 1
- create lock file
- rsync
- remove lock file

script 2 (running later then script 1)
- check if lock file is there
    - if not run
    - if it is there wait 10 minutes in a loop. break out of lopp when the lock file is gone
- continue to run script

Solution 4 :

Si vous êtes prêt à envisager d'autres outils, vous pouvez également jeter un œil à rdiff-backup. Il utilise librsync pour effectuer des sauvegardes et enregistre un nombre configurable de deltas/incréments. Il se verrouille également afin qu'un seul processus rdiff-backup puisse s'exécuter à la fois.

Solution 5 :

Ma réponse est un peu la même que celle de Mike.

Dans le script, vous devriez mettre quelque chose comme ceci :

  • créer un fichier de verrouillage
  • Vérifiez l'existence du fichier de verrouillage lors de sa prochaine exécution.

Mais il y a une chose très importante que vous devriez faire. et cela pour mettre en place un système de piège.

Donc, avec cela, ce que vous pouvez faire, c'est que même si d'une manière ou d'une autre votre script est tué ou que quelqu'un l'a tué, vous pouvez piéger ce signal et supprimer le fichier de verrouillage, de sorte que vous n'ayez pas de fichier de verrouillage obsolète.

Vous pouvez lire comment mettre en œuvre cela ici.

Juste une petite chose, vous ne pouvez pas piéger le signal 9, je veux dire si quelqu'un le fait kill -9 , vous ne pouvez pas piéger cela car ce signal interagit directement avec le noyau et il n'y a aucun moyen de piéger cela.

De plus, comme suggéré par John, vous devez supprimer le fichier de verrouillage à chaque redémarrage de votre système, juste pour vous assurer qu'il ne reste aucun fichier obsolète.

Ce que vous pouvez facilement faire en mettant un petit rm -f <FILE> commande dans /etc/rc.local


Linux
  1. Des transferts de fichiers plus intelligents que Rsync ?

  2. Linux - Comment faire en sorte que Sar s'affiche pour la veille ?

  3. Attendre la fin du téléchargement de plusieurs fichiers ?

  4. Rendre le fichier Bat disponible partout pour le terminal ?

  5. Comment utiliser les exemples de verrouillage C Mutex pour la synchronisation des threads Linux

Commande ls sous Linux pour lister les fichiers

Comment rendre un fichier exécutable sous Linux

Estimer le temps ou le travail restant pour terminer pour Rsync ?

Une doublure pour vérifier si le fichier existe ?

Comment verrouiller un fichier contre la suppression tout en le rendant accessible en écriture ?

Comment créez-vous une liste/fichier à partir duquel pacman peut être installé ?