Outils pour utilisateurs

Outils du site


tech:exemple_de_script_rsync_d_envoie_de_fichiers_via_ssh

Ceci est une ancienne révision du document !


Exemple de script rsync d'envoie de fichiers via SSH - pushlogs

QQOQCP

Quoi: Envoie de fichiers logs des composants suivants : xxx01, xxx02

Où: Le serveur destinataire est un serveur SFTP (SSH) renseigné dans le fichier pushlogs.env La liste des fichiers à envoyer est défine dans le fichier pushlogs.lst

Quand: Définie dans le(s) crontab de l'utilisateur(s) propriétaire des fichiers Normalement il s'agit de l'utilisateur 'plopuser'

Qui: Auteur: JBL Pour: ACME

Comment:

  • Une crontab de l'utilsateur 'plopuser' (ou autre) appelle le script bash pushlogs.sh
  • pushlogs.sh utilise la commande rsync en utilisant le protocole SSH
  • L'authentification se fait par clef SSH (RSA 4096)
  • pushlogs.sh va lire le fichier .pushlogs.env et .pushlogs.lst présent à la racine du HOMEDIR

Prérequis

  • Les commandes suivants doivent être présentes : rsync

Options

Général

  • Le script ne prend aucun argument
  • Les options sont présentes et documentées dans le fichier .pushlogs.env

Crontab

Les crontab peuvent utiliser nice et ionice afin de limiter les ressources. L'envoie des logs étant de priorité inférieur aux traitements métier. Exemple (dans /var/spool/cron/plopuser) :

# Push logs
05 02 * * * nice -n 10 ionice -n 7 bash ~/scripts/pushlogs.sh >> ~/logs/pushlogs.txt 2>> ~/logs/pushlogs.err

~/.pushlogs.env

  • Voir ce fichier.
  • Une limitation de la bande passe permet de ne pas impacter le métier (BMLIMIT)
  • Il peut être utilse de limité l'envoie des logs aux seules fichiers récemment modifiés. Exemple pour les fichiers des 2 derniers jours : FIND_OPTS='-mtime -2

~/.pushlogs.lst

  • Contient la liste dans fichiers / dossier à envoyer
  • Le chemin est relatif à l'homedir de l'utilisateur (normalement '/home/plopuser/')
  • Il est possible d'utiliser des wildcards “”. Exemple ./app/L*/logs_backup/ ===== Génération des clefs ===== Les paires de clefs ont été générées de la façon suivante :

    <code bash> ssh-keygen -N -t rsa -b 4096 -C “SCS01_rsync_pushlog” -f id_scs01_rsync_pushlog ssh-keygen -N -t rsa -b 4096 -C “SCS02_rsync_pushlog” -f id_scs02_rsync_pushlog ssh-keygen -N -t rsa -b 4096 -C “SAR01_rsync_pushlog” -f id_sar01_rsync_pushlog </code> <code bash> #! /bin/bash

    set -euo pipefail IFS=$' \t\n' export LC_ALL=C

    SCRIPT_NAME=$(basename “$0”) PIDFILE=/dev/shm/${SCRIPT_NAME%.sh}.pid ENVFILE=${HOME}/.${SCRIPT_NAME%.sh}.env LISTSCRFILE=${HOME}/.${SCRIPT_NAME%.sh}.lst

    trap 'rm -f “$PIDFILE”' EXIT ERR

    echo “$(date --rfc-3339=second)” DEBUT EXECUTION

    set +e if [ -f “$PIDFILE” ]; then PLOP_PID=$(head -1 “$PIDFILE”) echo “WARNING EALREADY: Operation already in progress (114)” >&2 kill “$PLOP_PID” >/dev/null 2>&1 sleep 5 kill -9 “$PLOP_PID” >/dev/null 2>&1 sleep 5 if [ -d /proc/“$PLOP_PID” ]; then echo “ERROR EDEADLOCK: Resource deadlock avoided (35)” >&2 exit 35 else rm -f “$PIDFILE” fi else echo $$ >“$PIDFILE” fi set -e

    # shellcheck source=pushlogs.env source “$ENVFILE”

    main() { echo “$(date --rfc-3339=second)” DEBUT COPIE cd “$BACKUP_ROOT_DIR” || exit 2

    # shellcheck disable=SC2068,SC2046 find $(grep -v '^#' “$LISTSCRFILE”) -type f ${FIND_OPTS[@]} -print0 | rsync -e “ssh -o StrictHostKeyChecking=no -o CheckHostIP=no ${SSH_OPTS[*]}” \ --bwlimit=“$BMLIMIT” ${RSYNC_OPTS[@]} --files-from=- --from0 “${BACKUP_ROOT_DIR}” “${SSH_USER}”@“${SSH_HOST}”:“${SSH_DIR}”

    cd - echo “$(date --rfc-3339=second)” FIN }

    main </code> FIXME

tech/exemple_de_script_rsync_d_envoie_de_fichiers_via_ssh.1761816623.txt.gz · Dernière modification : de Jean-Baptiste

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki