Distribuiamo regolarmente CPU del chiosco interattivo a siti phsyical remoti e ho sviluppato un'applicazione di aggiornamento del contenuto che esegue una sincronizzazione notturna delle risorse multimediali tra ciascun chiosco (Windows 7 Pro) e un CMS ospitato (server Ubuntu virtualizzato in esecuzione su linode.com). Il programma di aggiornamento del contenuto è creato in C# /. NET e genera un processo Unison secondario utilizzando Process.Start(). Unison è configurato per connettersi al server remoto tramite SSH utilizzando una chiave privata.Unison sync tra Windows/Linux si blocca casualmente durante il trasferimento
Il problema che stiamo colpendo è che quando generato come un processo figlio da ContentUpdater.exe, Unison spesso smette semplicemente di comunicare con il server remoto durante un trasferimento e si blocca indefinitamente. Non c'è una semplice riproduzione - a volte funziona, il più delle volte si blocca. Sembra essere più fragile su aggiornamenti più grandi (400 MB +), ma è più una congettura che altro. Quando si blocca, il processo Unison sul client (Windows 7) mostra ancora il 25% di utilizzo della CPU, e il server mostra anche il processo unison in esecuzione - non c'è solo attività di rete. So che si sta connettendo, perché inizia sempre il processo e passa attraverso il trasferimento, ma non si blocca mai nello stesso posto due volte. Sto eseguendo un build binario nativo di Windows di Unison-2.40.63.exe e la stessa versione di unison sul server remoto.
La riga di comando Unison su Windows appare come:
Unison-2.40.63.exe -contactquietly -silent -batch -sshcmd "C:\KioskManagement\Apps\ssh2plink.bat" -sshargs "-p 22 -i C:\cygwin\home\someuser\.ssh\contentupdater-rsync-key.ppk" -ignore "Path {innovations,todaytomorrow,scale,mooreslaw,brilliantminds,askafab}" ssh://[email protected]//home/cms/base-preview/webapps/ROOT/applications C:\kioskdir\temp\applications -force ssh://[email protected]//home/cms/base-preview/webapps/ROOT/applications
Per la cronaca, avevo inizialmente scritto il programma di aggiornamento dei contenuti da utilizzare rsync (via Cygwin su Windows), ma stava colpendo gli stessi problemi. Per vedere se il trasporto ssh era parte del problema, I tried using rsync in server mode (rsyncd) ma l'impiccagione continuava a far girare la testa.
A questo punto, sono completamente sconcertato. Il problema si ripropone anche su altri server, quindi penso che sia sul lato Windows delle cose. Sono anche incline a credere che il problema si verifica solo quando si chiama Unison/rsync da Process.Start() all'interno di un altro processo (UPDATE: ho appena ricevuto la repro quando si esegue dalla riga di comando) - non sembra fallire quando si esegue direttamente dalla riga di comando. Unison/rsync non sbaglia mai, quindi non ci sono file di log da controllare (a meno che qualcuno non conosca una sorta di traccia sul lato server o file di log sul server remoto che posso controllare - rivelazione completa: sono un fanatico di FreeBSD, e so prezioso poco di Ubuntu sotto il cofano).
Grazie in anticipo per qualsiasi intuizione/idee/soluzioni!
Best
Questa non sembra essere una risposta. –