PDA

View Full Version : Robocopy Script logoff interrotto


Drin-Drina
12-09-2016, 17:54
Ciao a tutti
come da titolo sto cercando di fare un batch di backup con robocopy per il solo PST di outlook che si avvii in automatico la sera a finesessione. Avevo pensato al comodo script di logoff (o di arresto), ma in tutti i modo che ho provato il comando robocopy di interrompe a metà circa non concludendomi la copia. Ho provato a modificare di tutto sull'editor dei criteri di gruppo e anche un paio di chiavi di registro ma sembra che nulla cambi... lo script è questo

net use * /d /yes
net use R: \\cartellaDeiBackup /u:user password
robocopy "C:\Temp" R:\Temp posta.pst /LOG+:c:\logrobocopy.txt
net use * /d /yes

Ci sono i controlli sul tempo (deve avviarsi solo dopo le ore 19) ma il problema non è quello. Ho fatto le prove con un pst di circa un giga e me ne copia metà e poi il log di robocopy si interrompe bruscamente.
Sia nei modelli amministrativi del Pc che degli user ho modificato i tempi di forzatura di spegnimento, la priorità degli script e provato varie combinazioni ma non cambia assolutamente nulla. A metà circa della copia il pc si spegne e il log di robocopy di interrompe brutalmente (ma registra fino a circa il 40-50% della copia). Non riesco davvero a capire come fare a mettere in pausa il logoff (o shutdown che sia) e soprattutto, sarà sicuramente colpa mia ma mi chiedo: che caspio li avete messi a fare sti script di logoff se poi il pc si spegne prima di terminarli?:mbe:

Naturalmente lanciato a manina fuori dal contesto logoff/shutdown funziona perfettamente e copia tutto a dovere, riempiendomi correttamente il file di log di robocopy.
Cosa può essere?

zeMMeMMez
12-09-2016, 18:02
...

x_Master_x
12-09-2016, 18:32
Windows aspetta per un determinato periodo ( cioè 10 minuti* ) che lo script si concluda prima effettuare il logoff. Usa solo e soltanto questo semplice VBS come script di fine sessione per effettuare la prova:

WScript.Echo "Start"
WScript.Sleep 60000
WScript.Echo "End"

Solo dopo aver cliccato sul messaggio ( tempo 1 minuto prima che appaia visto che parliamo di millisecondi ) il logoff verrà effettuato. Usa wscript.exe come programma e il percorso del VBS come argomento. Ultimo consiglio, usa una copia di backup incrementale ed evita di scrivere nella root del disco.

*
Configurazione computer\Modelli amministrativi\Sistema\Script

Tempo massimo di attesa per gli script Criteri di gruppo da impostare su 0 o valore che preferisci

zeMMeMMez
12-09-2016, 18:51
...

Drin-Drina
12-09-2016, 21:17
Ciao a tutti, non mi sono spiegato benissimo per non essere troppo prolisso :D
Dunque, in azienda abbiamo due sorage synology di fascia alta con 20 e 48TB usate per la qualunque, da dischi di rete, disaster recovery, server fpt, html ect Per avere un buon backup utilizzo delle ap ad-hoc per sincronizzare costantemente le cartelle degli utenti con uno di essi, escludendo per ragioni di traffico sulla lan i file pst di outlook.
non è che mi sia chiarissimo da dove salti fuori il logoff.

banalmente disattiva tutto, e metti uno shutdown nello script alla fine del robocopy.
tieni comunque presente che la tecnica della "lettera" (immagino per le credenziali) non è un granchè, se hai un ransomware "in giro"
La mia idea era di effettuare una copia di backup del pst ad ogni fine sessione dell'utente purchè la disconnessione avvenga dopo un certo orario.
Ho già preso un ramson in azienda (risolto senza problemi con il DR) ed è per questo che sto aumentando costantemente la qualità dei backup, in genere la cartella dei backup non è mai mappata sui client, se ne occupa appunto l'app synology sui client con altro protocollo, e spero che una mappatura "volante" a fine sessione non consenta ad un eventuale ramson di criptarmi i file in un così breve e circoscritto periodo.

Windows aspetta per un determinato periodo ( cioè 10 minuti* ) che lo script si concluda prima effettuare il logoff.
Ho letto anche io questa cosa ma non trovo riscontro .... o meglio. Avevo dimenticato un PAUSE finale nello script per fare dei controlli e avevo spento la mia macchina per prova. Con pause finale la macchina si bloccava al logout, come appunto fosse in attesa dell'input per uscire da PAUSE; non ho aspettato i famosi 10minuti, ma 5 tutti. Togliendo pause, la macchina si riavvia dopo appena 1 minuto, nonostante non sia ancora finita la copia di robocopy. Purtroppo già oggi ho provato a modificare quello e altri valori (GPO utente) senza successo, è come se ci fosse qualche impostazione che bypassa quel valore. Domani proverò col VBS tanto per provare, possibile sia qualcosa di particolare del robocopy? Ho provato Script e powershell ma non cambia nulla, script di logout e di shutdown ma non cambia nulla....
Proverò anche con un client di qualche collega per escludere un problema della mia macchina
Personalmente ti consiglierei di...

1) mettere un taskkill /f di outlook.exe (caso mai lo avessi lasciato aperto aperto)
2) usare zpaq invece di robocopy. copia molto più veloce, e soprattutto versionata "da sempre a sempre"
In teoria lo script dovrebbe partire ben dopo la chiusura di tutti i task utente, darò un occhio anche a zpaq, anche se non credo sia un problema di quale sw usare


Non tenete conto dei percorsi che vedete che sono solo di prova, anche perchè poi dovrò distribuire tutto ai client tramite GP di dominio

zeMMeMMez
13-09-2016, 08:29
...

x_Master_x
13-09-2016, 08:39
Ho letto anche io questa cosa ma non trovo riscontro....


Maximum wait time for Group Policy scripts

By default, the system lets the combined set of scripts run for up to 600 seconds (10 minutes), but you can use this policy to adjust this interval


Il tuo script funziona in modo sincrono? Nel senso che quando lanci il comando per ROBOCOPY lo script deve attendere la chiusura del processo prima di continuare, forse ( ed è una ipotesi ) per questo motivo Windows effettua la chiusura della sessione in anticipo poiché il tuo script conclude ma ROBOCOPY no. Ad esempio il comando .Run in un VBS:

bWaitOnReturn
Optional. Boolean value indicating whether the script should wait for the program to finish executing before continuing to the next statement in your script. If set to true, script execution halts until the program finishes, and Run returns any error code returned by the program. If set to false (the default), the Run method returns immediately after starting the program, automatically returning 0 (not to be interpreted as an error code).

In un Batch è:

START "TITLE" /WAIT

Con Powershell è:

-Wait
Indicates that this cmdlet waits for the specified process to complete before accepting more input. This parameter suppresses the command prompt or retains the window until the process finishes.

Così via.

Drin-Drina
14-09-2016, 10:42
Ieri sono stato a casa malato , ho fatto alcune prove senza successo e oggi ho replicato le prove sulla macchina ma niente.
forse ( ed è una ipotesi ) per questo motivo Windows effettua la chiusura della sessione in anticipo poiché il tuo script conclude ma ROBOCOPY no.
Ci ho creduto perchè aveva un gran senso ma niente... Non ne vuole sapere, dopo circa 60-90 windows mi chiude la sessione qualsiasi cosa provi. Ho messo il robocopy sotto START /WAIT , START /WAIT /B , provata la copia in locale (con un file più grande in modo che non potesse concludere la copia in maniera naturale in quel tempo), provato su altra macchina...
niente si ferma sempre a circa 60-90 secondi di copia, se il file è abbastanza piccolo o la rete abbastanza veloce da copiarlo in tale tempo bene, altrimenti si blocca brutalmente il robocopy dov'è arrivato è arrivato....

net use * /d /yes
net use R: \\192.168.111.5\backups /u:******* ######
START "" /WAIT robocopy "C:\Temp" C:\Temp\New 22Luglio.mp4 /LOG+:c:\logrobocopy.txt /R:0
net use * /d /yes

Il file di LOG:

-------------------------------------------------------------------------------
ROBOCOPY :: Copia di file efficace per Windows
-------------------------------------------------------------------------------

Avviato: Wed Sep 14 11:18:08 2016

Origine : C:\Temp\
Destinazione : C:\Temp\New\

File: 22Luglio.mp4

Opzioni: /COPY:DAT /R:0 /W:30

-------------------------------------------------------------------------------
Nuova directory 1 C:\Temp\
Nuovo file 6.7 g 22Luglio.mp4
0.0%
0.0%
0.0%
0.0%
0.0%
0.0%
0.0%
0.1%
0.1%
0.1%
0.1%
0.1%
0.1%
0.1%
0.2%


Ect..... finche non si blocca (con questo file circa al 22%)
Configurazione computer\Modelli amministrativi\Sistema\Script
Ho ripristinato i GPO compreso questo sopra ma non credo sia questo il caso in cui interviene, dato che si ferma ben prima dei 10 minuti di default....
Bho...:(

zeMMeMMez
14-09-2016, 10:45
...

Drin-Drina
14-09-2016, 10:58
Scusa, non offenderti, ma quale parte di zpaq non ti è chiara?
Se non riesci a posticipare a sufficienza la chiusura (magari un timeout sul kill dei servizi, nascosto in qualche parte del registro?) usa un metodo che ti faccia copiare il file più rapidamente.

O almeno prova, no? Che ti costa? ;)

Con caselle thunderbird (quindi non PST, ma non dovresti avere differenze enormi) aggiorno il backup di 200GB di posta in rete in circa 70 secondi, con una vecchia macchina Xeon

Nessuna offesa, ma cosa non ti è chiaro del fatto che ho sempre usato robocopy e che non ho intenzione di usare un palliativo che probabilmente non mi risolve il problema? So bene anche io che se avessi Thunderbird e non un PST unico la storia sarebbe diversa...
Che se avessi file piccoli potrei utilizzare altri metodi, purtroppo ho utenti con PST da 40gb ai quali non posso/voglio/devo stravolgere il loro utilizzo, e visto che in linea teorica esiste più di una soluzione, non sono il tipo da raggirare il problema accontentandomi.
So bene che se mozzassi le mani ai mie utenti, se gli incendiassi il gateway o gli staccassi il contatore della corrente elettrica non avrei problemi di ramson (perchè altri metodi per "eradicare il problema ramson" non mi risulta ne esistano, ne a me ne alle più grandi swhouse di sicurezza) ma purtroppo ho un certo ambiente di lavoro che non posso in questo momento stravolgere.
Quindi pf, cerco una soluzione al problema con i mezzi e gli ambienti che ho indicato... Poi se esiste un metodo per avere lo stesso risultato nelle stesse condizioni (quindi una copia di grandi PST fuori o al termine dell'orario di lavoro) ben vengano.
Copie al login, altri sw che NON mi risolvono il problema, cambi di client e simili NON sono per me una soluzione,
detto questo ti ringrazio comunque del tempo che stai dedicandoci.

zeMMeMMez
14-09-2016, 11:06
...

zeMMeMMez
14-09-2016, 11:29
...

Dane
14-09-2016, 11:46
nel caso in cui vuoi/devi continuare ad insistere con robocopy.....

- prova ad usare un'altra versione di robocopy (per esempio mi ricordo che con la versione inizialmente inclusa in win7 c'erano problemi per salvare su share di rete)
- prova a definire una pianificazione da logoff, piuttosto che logout script. Magari ti risolve. O ancora accendi i pc di notte di WoL e fai i backup con tutta la santa calma che ci vuole....

zeMMeMMez
14-09-2016, 11:51
...

x_Master_x
14-09-2016, 12:12
Il thread sta andando leggermente OT per non dire del tutto :stordita:
Drin-Drina vuole sapere mezza cosa:

Perché Windows interrompe lo script al logoff prima del suo completamento?

I consigli sulle pratiche di backup, i programmi, usa questo, fai così, io faccio così etc saranno tutti ben accetti dall'utente ma alla fine l'argomento del thread non lo affronta nessuno...se qualcuno entra perché ha lo stesso problema ( che magari non è correlato al backup ma per chissà quale motivo ) non troverà la risposta in questo modo.

Detto questo, Windows una volta aggiunta la policy indicata al post #3 su "Infinito" NON blocca l'esecuzione dello script. Fatta una semplice prova in VM pulita:

Set objFSO=CreateObject("Scripting.FileSystemObject")

outFile= objFSO.GetAbsolutePathName(".") & "\log.txt"
Set objFile = objFSO.CreateTextFile(outFile, True)
objFile.Write Now() & vbCrLf

WScript.Sleep 720000

objFile.Write Now() & vbCrLf
objFile.Close

Il log è questo:

14/09/2016 12:46:35
14/09/2016 12:58:35

Che conferma che lo script è concluso correttamente oltre il periodo di default e che quindi l'applicazione della policy funziona. Drin-Drina quindi prova quello script in locale dopo aver settato correttamente la policy indicata, due possibilità:
a) Windows lo interrompe, c'è un problema con le impostazioni GPO indipendenti dallo script che usi
b) Windows NON lo interrompe, c'è un problema con lo script che usi

Iniziamo a capire questo...

zeMMeMMez
14-09-2016, 14:42
...

zeMMeMMez
14-09-2016, 15:27
...

Drin-Drina
29-09-2016, 14:37
Scusate la lunga attesa ma il lavoro è tiranno. Ho risolto, si trattava di una serie di bug per i quali non mi aggiornava con gpupdate il registro...
E me ne sono accorto, in fin dei conti :D provando ad usare stu zpac (che non mi piace per niente e NON è più veloce di robocopy :D) dato che a registro non mi aggiornava il nome del bat che avevo creato appositamente...
Sugli altri client nessun problema, difatti ora ho tutte le macchine windows che backuppano la posta dopo le 19 ad un qualsiasi riavvio, spegnimento e disconnessione.
Grazie a tutti del supporto, adesso mi fiondo a fare la stessa roba su macos :rolleyes: :cool: