Cron, rsync und screen

04/09/2007 - 08:26 von Juerg Schwarz | Report spam
Ich starte wöchentlich einen cronjob welcher mir per ssh und rsync ein
grösseres Verzeichniss von einem externen Server lokal synchronisiert.
Diese Job làuft dann meist etwas sehr lange (2 Tage oder lànger). Nun
möchte ich mir den Fortgang dieses Jobs auf den Bildschirm holen. Wie
muss ich diesen Job starten und wie zurückholen?

Irgendwas mir screen rsync parameter cmd ?

Juerg
 

Lesen sie die antworten

#1 Dirk Clemens
04/09/2007 - 09:24 | Warnen spam
Juerg Schwarz schrieb:
Ich starte wöchentlich einen cronjob welcher mir per ssh und rsync ein
grösseres Verzeichniss von einem externen Server lokal synchronisiert.
Diese Job làuft dann meist etwas sehr lange (2 Tage oder lànger). Nun
möchte ich mir den Fortgang dieses Jobs auf den Bildschirm holen. Wie
muss ich diesen Job starten und wie zurückholen?

Irgendwas mir screen rsync parameter cmd ?

Juerg



wie wàre es mit: rsync --progess ... > meine_log_datei

und zum nachschauen:
tail -f meine_log_datei

Eine andere Möglichkeit:
Man kann die fd des rsync-Prozesses beobachten:
/proc/PID/fd/FD_NUM

Dazu habe ich mal das folgende bash-Script geschrieben.
Der Aufruf: watch-fd PID FD_NUM

PID ist die PID des lokalen rsync-Prozesses.
FD_NUM ist die Numemr des file descriptors, normalerweise 3 oder 4.


#!/bin/bash
# (c) Lemmi, develop (at) cle-mens.de, 2007-04-29, GPL2

pid="${1//[!0-9]}"
fd="${2//[!0-9]}"
dir=/proc/$pid/fd
link=$dir/$fd

if [[ $1 = "" || $1 != "$pid" || $2 = "" || $2 != "$fd" || ! -d $dir ]]
then
echo "usage: ${0##*/} pid fd_num" >&2
exit 1
fi

# tty setup
[[ -x `which tty` ]] && tty -s && stdin_is_tty=1 || stdin_is_tty=0
shopt -s expand_aliases
alias tty_get_cols='stty -a | tr \; "" | awk '\''$1=="columns"{print
$2}'\'''
alias tty_get_rows='stty -a | tr \; "" | awk '\''$1=="rows"{print $2}'\'''

echo
ls -l $dir
echo

lastheadcnt=0
while true
do
[[ -d $dir ]] || exit 0
current="`readlink -f $link`"
if [[ $current != "" && $current != "$link" && $current != "$last" ]]
then
last="$current"
if ((stdin_is_tty))
then
cols=`tty_get_cols`
let max=cols-9
if (( ${#last} < $max ))
then
echo "`date +%T` $last"
head cnt=0
else
newhead="${last:0:(max-4)}"
newhead="${newhead%/*}/"
[[ $newhead = /... ]] && newhead="${last:0:(max)}"
if [[ "$newhead" != "$head" ]]
then
head=$newhead
echo "`date +%T` ${head}..."
cnt=0
fi
print="${last:(${#head})}"
if (( ${#print} < max - 7 ))
then
echo "`date +%T` .../$print"
else
echo "`date +%T` ... ${last:(-max+7)}"
fi
let cnt++
(( cnt > `tty_get_rows` - 5 )) && head fi
else
echo "`date +%T` $last"
fi
fi
sleep $((5-`date +%s`%5))
done
-




Mail bitte an: lemmi (minus) usenet (at) ftb (minus) net (dot) de

Ähnliche fragen