Je transfère des fichiers sur le réseau à l'aide de rsync dans un travail cron qui s'exécute toutes les minutes. La tâche consiste à envoyer un nouveau fichier chaque fois qu'il doit être téléchargé sur le serveur distant:
Depuis que je suis nouveau, je fais une grosse erreur ici:
* * * * * rsync -azP /local_path [email protected]:/remote_path > /dev/null
rsync crée un fichier temporaire (à distance) et à la minute suivante, il crée de nouveau un fichier temporaire (à distance) après quelques minutes, mes réseaux commencent à s'étouffer et il n'y a plus de bande passante pour l'envoi, puis je tue tous les processus rsync et les copie à la fois.
Besoin de cette automatisé s'il vous plaît aider.
Merci
Réponses:
On dirait que c'est parce que l'exécution de la commande prend plus d'une minute. Par conséquent, les commandes s'accumulent jusqu'à ce que votre système manque de ressources.
Vous pouvez vous assurer que seule une instance de celle-ci
rsync
s'exécute à l'aide d'un fichier de verrouillage.util-linux
inclut un wrapper de verrouillage de fichier appeléflock
, que vous pouvez utiliser dans votre crontab comme ceci:Dans l'exemple ci-dessus, le chemin du fichier de verrouillage est
/tmp/example.lock
, mais vous pouvez le définir comme étant raisonnable.-n
empêchera lesflock
commandes de s’empiler car elle se fermera immédiatement au lieu d’attendre que le verrou soit libéré pour continuer.Alternativement, vous pouvez également empêcher votre commande cron de s’empiler en créant un script avec un verrou assez simple garantissant qu’une seule instance du script puisse être exécutée à la fois:
Mécanisme de verrouillage inspiré par la prévention des exécutions de tâches cron en double par Benjamin Cane
Notez que la principale limitation du script est que si le fichier PID n'est pas supprimé pour une raison quelconque et qu'un autre processus a le même PID, le script se ferme par erreur.
Enregistrez ce script quelque part, comme dans
/usr/local/bin/example.sh
,chmod +x /usr/local/bin/example.sh
puis appelez-le depuis votre crontab comme ceci:la source
rsync
démarrage. En outre, larm
commande dans ce script doit être exécutée viatrap
pour être sûr que dans le cas par exemple d'un événement de redémarrage ou d'arrêt, le fichier PID serait supprimé. Encouragez également les étudiants à faire au moins une partie de leurs travaux au lieu de leur donner des solutions gratuitesTout d’abord, supprimez l’
-P
option, cron ne veut vraiment pas voir les progrès.Vous devez implémenter un mécanisme de verrouillage, n'appelez pas
rsync
directement à partir de cron, mais créez plutôt un script qui serait utilisé dans cron. Dans le script, vérifiez la première condition si elle estrsync
déjà en cours d'exécution (sortie grep ps par exemple), si elle est en cours d'exécution, quittez simplement le script, sinon exécutez-larsync
.la source