Newsgroup: it.comp.os.linux.sys
Titolo: Ripristinare output da processo rsync, dopo la disconnessione ssh

Ciao,
sto facendo un backup tramite ssh con rsync tra due macchine: una è un
server a cui mi collego tramite ssh ed una è un hard disk di rete con
una distro linux sopra.
Con uno script avvio 'rsync' con i parametri --progress e --stats, che
mi mostrano la progressione della sincronizzazione (dimensioni,
percentuale di trasferimento, velocità, etc).
Quando però il pc va in standby perdo la connessione ssh e,
ricollegandomi, anche se rsync continua a girare, non ricevo più le
statistiche.
Di solito killo il processo e lo riavvio in modo da ripristinare la
visualizzazione delle informazioni di sincronizzazione.
Mi chiedo però:
sarà possibile ripristinare la connessione iniziale, o comunque
reintercettare il flusso di output di rsync che fornisce le
informazioni di progressione?
Se, dopo lo standby, mi ricollego su ssh mi rirovo di nuovo alla
semplice shell.
Come faccio a riattaccarmi sull'output di rsync?
Grazie mille :)

 statistiche.
perche' non usi screen ? 
-- 
Never try to teach a pig to sing.
It wastes your time and annoys the pig.

 statistiche.
rsync può anche mandare il suo output su di un file di log e tu puoi 
visualizzarlo usando il tail quando sei connesso o ti riconnetti.
Le opzioni che ti interessano sono
--log-file=NOMEFILE
--log-file-format=FORMATOLOG
per il formato log puoi vedere la man page di rsyncd
Ciao Fabrizio

 perche' non usi screen ?
Perché non lo conoscevo! ^_^
Molto carino e utile. Lo installo adesso sul server.
Sarà comodo in futuro.
Il problema però resta:
ho una sessione di rsync in corso e vorrei riattaccarmi al processo
per carpirne l'output e vedere a che punto è.
C'è qualche metodo 'più nativo' per farlo?
Tipo un direct del flusso di output del processo rsync verso la mia
nuova connessione ssh?
Secondo me si può fare ... ma non so come! :-)
Come potrei fare? ...

 Ciao Fabrizio
Grazie,
anche questa è una buona soluzione. Se invece di fare un append lo
sovrascrive ogni volta, credo che lo integrerò nel mio script, in modo
da avere sempre una traccia delle operazioni.
Però anche questo approccio non mi permette di intercettare il
processo *attualmente* in esecuzione. :(
Quel che dico io è:
- rsync stava mandando l'output alla mia sessione ssh.
- mi è caduta la connessione
- rsync è ancora in esecuzione ed *immagino stia ancora inviando
output* verso quella sessione (oramai scaduta)
Mi posso mettere nuovamente nel mezzo ed intercettare quell'output;
oppure ripristinare la sessione che lo riceve?
Come imposto questo comportamento per il processo rsync?

 Come imposto questo comportamento per il processo rsync?
Te l'hanno detto.
Usa screen.


Scusa probabilmente mi sfugge qualcosa. Sul manuale non sono riuscito
a trovare niente a riguardo del ripristino dell'output del processo
che è attualmente corso.
Quello che trovo è solo per riattaccarsi a precedenti sessioni di
screen; non per collegarsi all'output di processi eseguiti fuori
dall'ambito di screen, come nel mio caso. Screen si ricollega anche a
sessioni ssh perse che non erano state avviate da screen?
Mi spieghi come fare? Io non riesco a capire come si fa e come usare
screen per riprendere l'output del processo rsync (che non ho avviato
da screen).
Grazie...

 screen).
Lo avvii da dentro screen.
Se la linea casca, ti riattacchi a screen e lo trovi li, bello bello, che 
fa il suo lavoro.


Ok, infatti ho scoperto screen oggi ed è ottimo.
Io però cercavo appunto una soluzione nel caso che NON abbia avviato
il processo da screen ma da una normale shell ssh (successivamente
caduta).
Per questo mi aspettavo qualcosa di più "basso livello" per
riacciuffare l'output del processo.
Tipo un direct dell'output video di un processo verso una nuova
destinazione (dalla vecchia session ssh a quella nuova, nel mio caso).
Screen lo userò sicuramente, ma non risolve il mio problema
originario :-(
Ed oramai ho la curiosità di sapere se si può fare! ^_^

 processo da screen ma da una normale shell ssh (successivamente caduta).
Fai ssh, apri uno screen e *poi* lanci il tuo rsync.

 caduta).
lo uso da anni, per questo te l'ho consigliato ...
apri la connessione ssh
dai il comando screen
qualsiasi cosa succeda, ti riconnetti con ssh e con 
screen -ls
screen -d -r <num>
ti riconnetti ...



I comandi unix, questi sconosciuti :-)
$ tail -f LOGFILE
Ciao
Giovanni
-- 
   A computer is like an air conditioner,
   it stops working when you open Windows.
   < 
http://giovanni.homelinux.net/
 >

 caduta).
Processo che al 98% ha seguito la sorte della shell, cio� � morto.
-- 
           |Save our planet!
    Ciao   |Save wildlife!
   roberto |For your E-MAIL use ONLY recycled Bytes  !!
           |roberto poggi   
rpo...@softhome.net

 Processo che al 98% ha seguito la sorte della shell, cioè è morto.
Ecco, infatti è strano che le volte precedenti, caduta la connessione,
cadeva anche il processo.
Oggi invece mi è capitato di riconnettermi.... e il processo era
sempre lì. Non saprei dire il perché.
Per questo volevo attaccarmici.... perché da qualche parte stava
inviando output.... ma a me non arrivava più niente.

 $ tail -f LOGFILE
Difficile farlo su un processo che è stato già avviato senza
effettuare il log su file...

Pictor wrote:

Puoi provare a connetterti con gdb e cambiare la destinazione del 
descrittore su cui sta scrivendo rsync. Ipotizzando che stesse scrivendo sul 
fd 1 (standard output), sapendo il pid di rsync, e volendo mandare l'output 
al file /path/to/file, puoi provare questo:
$ gdb -p <pid di rsync>
...
(gdb) p creat("/path/to/file", 0600)
$1 = 5
(gdb) p dup2(5,1)
$2 = 1
(gdb) p close(5)
$3 = 0
(gdb) q
...
e da li' in poi dovrebbe cominciare a scrivere sul file. Il "5" e' un 
esempio, il valore reale dipendera' da quanti file il processo ha aperto. 
Devi usare lo stesso valore al posto del 5 anche nelle successive istruzioni 
dup2() e close().

 effettuare il log su file...
Se vuoi ricollegarti ad un processo già in corso e non hai usato 
l'opzione per il log o se non lo hai lanciato tramite screen, la vedo 
dura.
Dal posto originale hai detto che di solito killavi il processo e lo 
rilanciavi.  Non ti resta altro da fare usando uno dei metodi suggeriti.


 inviando output.... ma a me non arrivava più niente.
Killi il processo e riavvii rsync con screen o con i parametri di log.
In tutti i casi, questa e` una procedura correttiva che andra` eseguita
solo una volta, in quanto per il futuro (si spera) utilizzerai uno dei
metodi che ti sono stati suggeriti
Enrico

On 26 Ago, 21:44, Enrico 'Henryx' Bianchi

Sì sì, in futuro certamente farò così.
Stò già usando produttivamente 'screen': molto comodo.
Ma la mia, oltre ad una necessità, era una curiosità.
Cercavo una risposta simile a quella di antani.
... per capire un pò meglio come funzionano SO e processi :)

 rilanciavi.  Non ti resta altro da fare usando uno dei metodi suggeriti.
Quello che ho fatto. Ma ero caparbio sullo scoprire anche un'altra
soluzione (per problematiche future ^_^)


Mmmmh, questo è l'approccio che cercavo :)
Oramai il processo è killato da tempo. Ma farò sicuramente qualche
prova per testare il tuo suggerimento!.
Grazie mille! :D
Pictor