Ceci est une ancienne révision du document !
Table des matières
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/-t rsa -b 4096 -C “SCS01_rsync_pushlog” -f id_scs01_rsync_pushlog ssh-keygen -N===== 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 “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/bashset -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>
