Dies ist eine alte Version des Dokuments!
Rsync Client
Ich brachte für ein kleine Projekt einnen Rsyncclient der eine Clientsoftware von einem Server runterlädt. Danach sollte diese Clientsoftware gestartet werden. Der Benutzer sollte über den Fortschritt informiert werden. Hierzu erzeugte ich mit yad einen Fortschrittbalken.
#!/bin/bash # Skript verbindet sich zuerst mit dem Server um die aktuelle Client Version zu laden. # # Benötigt wird hierzu: # - ein Benutzer auf dem Server der Leserechte auf die Client Dateien hat # - ein SSH Schlüssel um sich ohne Passwort auf dem Server einzuloggen # - rsync auf Client und Server # - yad # # Variablen str_server=SERVER str_source=/var/www/software-client/client/* str_dest=/home/USER/client/ str_user=rsyncuser str_key=/home/USER/.ssh/id_rsyncuser_ecdsa str_icon=/usr/share/icons/software/software.ico str_title="Client" str_infoTxt="\nPrüfe Version ... \n" str_start=$1 # Wieviele Dateien müssen übertragen werden werden? int_numberOfFiles=$(rsync -auv --delete --dry-run --stats -e "ssh -i ${str_key}" ${str_user}@${str_server}:${str_source} ${str_dest} | grep "Number of regular files transferred" | awk '{print $6}') # Wenn keine Dateien übertragen werden müssen, dann starte direkt die Software if (( ${int_numberOfFiles} > 0 )) ; then count=0 { # Übertrage Dateien rsync -auv --delete --info=name -e "ssh -i ${str_key}" ${str_user}@${str_server}:${str_source} ${str_dest} | while read -r line ; do ((count++)) #echo "Datei ${count} von ${int_numberOfFiles}: $line" # Berechne den Prozentwert int_progress=$(( (count * 100) / ${int_numberOfFiles} )) # Lass über 100 dan bleibe bei 100 if (( ${int_progress} >= 100 )) then int_progress=100; fi echo ${int_progress} done } | yad --progress --title="${str_title}" --text="${str_txt}" --percantage=0 --auto-close --width=400 --height=100 --no-cancel --window-icon="${str_icon}" fi # Software Start ${str_dest}/${str_start}