Servizio “Ora di Windows” – impostazioni avanzate

Oggi vi propongo un interessante guida scritta dall’amico retalv; è la prima di una serie di quattro.😉

Questa piccola guida nasce per far conoscere cosa è questo servizio, troppo sottovalutato nell’uso “casalingo” dei sistemi equipaggiati con Windows 7.

Non inserirò immagini esplicative delle varie fasi sia perché non ve n’è bisogno sia per non distrarre chi legge con inutili effetti pirotecnici… ;) : eseguirò tutte le operazioni in linea comando tramite console. Se volete farlo parzialmente via GUI dovrete migrare voi il concetto.

La normale utenza home solitamente dà per scontato che l’orario del sistema operativo che ha nel PC di casa venga aggiornato solo per il fatto che si connette a Internet… bene se esiste ancora qualcuno che lo pensa è ora di sfatare di un buon 99% questo mito.

Effettivamente il sistema Windows da parecchie versioni, sicuramente da Windows 2000 in poi, supporta il sistema client-server NTP per sincronizzare l’orario con uno dei tanti orologi atomici sparsi per il globo, peccato che da Windows Vista in poi questo sistema sia impostato presupponendo che gli orologi locali siano molto precisi (un falso storico) e che quindi richiedano una normale sincronizzazione (sette giorni): al contrario pensano che questa sincronizzazione sia indispensabile nei domini, dove però ritroviamo macchine con orologi “a carbonella” che richiedono sincronizzazione ogni sei(6) ore..!

Dal mio punto di vista c’è qualche cosa che non quadra, comunque…

Il servizio che gestisce questa sincronizzazione in entrata (client) è quello denominato “Ora di Windows” e che ritroviamo nell’elenco servizi con nome w32time: all’installazione del sistema il servizio è impostato su MANUALE e risulta NON avviato.

Questa impostazione è voluta da Microsoft per diversi motivi: il client NTP di Microsoft è sempre stato soggetto a critiche riguardo la sicurezza del sistema, inoltre nell’ottica di un minor spreco di risorse il mantenerlo attivo per molto tempo senza un utilizzo è considerato deprecabile. Per non sacrificare ne la capra ne i cavoli, hanno pensato di renderlo attivo solo quando serve.

In rete si trova un guazzabuglio di informazioni, spesso dettate da una profonda ignoranza sull’argomento, che fanno derivare chi non lo affronta in maniera sistematica: d’altro canto Microsoft, che ha implementato il client NTP in modo non del tutto rispondente allo standard ma pensando soprattutto alla gestione delle reti Windows, fornisce una valanga di informazioni rivolte ai sistemisti che fanno desistere la maggior parte degli utenti home.

Spesso si legge in rete di utenti che lamentano di non riuscire ad avviare e tener avviato automaticamente questo servizio (quindi di riuscire malamente a sincronizzare il sistema) a cui viene risposto nei modi più disparati, come ad esempio di impostare il servizio in avvio automatico ritardato.

Cominciamo con lo spiegare questo arcano: da Windows Vista in poi i servizi possono essere “trigged”, con una pessima traduzione potremmo chiamarli “condizionati”: in altre parole si può configurare un servizio in modo che questo sia avviato (e/o fermato) se si presentano determinate condizioni come, tra l’altro, essere (o non essere) connessi a un dominio o se c’è (o non c’è) disponibilità di un indirizzo IP.

Il servizio w32time è uno di questi ed è impostato per essere avviato se la macchina fa parte di un dominio e fermato non appena lo scollegate da questo: essendo quindi veramente poco probabile che in casa vostra abbiate creato detta infrastruttura, in pratica NON lo vedrete mai avviato.

I servizi così configurati possono però essere avviati se chiamati esplicitamente: a questo pensa l’unità di panificazionecon l’evento nominato “Time Synchronization” che ha il compito di avviarlo ogni domenica alle ore 01:00, riavviandolo appena possibile (per i successivi 3 giorni) se in quel giorno e a quell’ora il computer era spento… peccato che se domenica pomeriggio avviate la macchina e questa non è in linea (non siete già connessi a internet all’avvio) l’evento viene eseguito, e pur andando in errore di sincronizzazione flaggato come tale: si dovrà attendere la domenica seguente per il prossimo tentativo… e via così.

Per arginare il problema (ammettendo che sia per voi un problema avere l’orologio non sincronizzato) si possono scegliere due strade più o meno semplici.
Quella sicuramente più semplice è modificare l’evento dell’unità di pianificazione variando l’orario di avvio in uno più consono alle vostre abitudini, magari aggiungendo-modificando i giorni di avvio sincronizzazione, mentre l’altra modifica sfrutta il comportamento del servizio a nostro favore: scegliete voi tra i due metodi quello più consono alle vostre esigenze.

Cosa-come possiamo fare per risolvere il problema..?

Scegliendo la riconfigurazione del servizio per modificare questo comportamento farraginoso non avremo bisogno di nulla che già non sia disponibile sul sistema.

Le fasi saranno le seguenti:

  • Cancellare impostazioni trigger di default
  • Inserire nuove condizioni trigger
  • Modifica del-dei nome-i server-s di sincronizzazione di default (e eventuali alternativi)
  • Modifica dell’intervallo tra sincronizzazioni
  • Eventuale configurazione della lista di impostazione manuale server NTP
  • Disabilitare evento in unità di pianificazione


In questo modo otterremo un servizio che si avvia quando ci connettiamo a Internet e si ferma quando ci disconnettiamo da essa: starà all’utente decidere se rendere totalmente automatico l’evento di sincronizzazione o mantenere la possibilità di variare manualmente il server NTP.

Prima di procedere ai pochi passi di configurazione, vi invito a ponderare come dimensionare l’intervallo tra un tentativo di sincronizzazione e l’altro: tempi molto stretti (minuti o ore) oltre ad essere un inutile appesantimento del sistema, potrebbero mettere l’IP in condizione di essere “bannato” (escluso dal servizio) per eccessiva occupazione dello stesso, d’altro canto dovete considerare di avere ragionevole possibilità di riuscire a sincronizzare l’orologio della macchina almeno una volta nell’arco di qualche giorno o di una settimana.

Considerate che se i tentativi di sincronizzazione avvengono su multipli di 3, 6, 12, 24 ore saranno eseguiti più o meno ai soliti orari il che può essere positivo se attivate il tutto negli orari canonici di utilizzo della macchina, ma controproducente se ciò non avviene: credo che una scelta di intervallo (possibilmente dispari) tra le 19 e 7 ore possa essere un compromesso accettabile per avere una sincronizzazione abbastanza sicura nell’arco di 7-10gg. Ricordate che l’orario di avvio-riferimento potrà essere modificato semplicemente eseguendo una sincronizzazione manuale.

Altra cosa che sarebbe meglio decidere è se volete rendere la sincronizzazione completamente automatizzata o se volete mantenere un minimo di controllo manuale: ovviamente qualsiasi cosa scegliate potrete in futuro nuovamente modificarla.

Cominciamo…

Per prima cosa accertatevi che il sistema sia off-line nei confronti di internet (spegnete-scollegate eventuali modem o modem-router, scollegate il cavo ethernet se avete connessione tramite HAG, ecc.) quindi aprite una console con DIRITTI AMMINISTRATIVI (Esegui come amministratore) e digitate il seguente comando:

sc qtriggerinfo w32time

…e otterrete la query dell’attuale configurazione trigger del servizio che vi evidenzierà quanto detto in precedenza.

Digitiamo ora il seguente comando per cancellare la configurazione appena letta…

sc triggerinfo w32time delete

e di seguito riconfiguriamo il servizio perché si attivi-disattivi all’individuazione di un indirizzo IP…

sc triggerinfo w32time start/networkon stop/networkoff

e controlliamo la configurazione appena fatta col solito comando di query…

sc qtriggerinfo w32time

Ora che il servizio è configurato a livello di trigger, è conveniente modificare la configurazione dell’intervallo di tempo che deve trascorrere tra i tentativi di sincronizzazione: per far questo dovremo andare a modificare il contenuto di una chiave di registro, precisamente la chiave…

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\w32time\TimeProviders\NtpClient
Valore: SpecialPollInterval
Tipo: double_word
Dati valore: 604800 (base decimale)

Impostando il numero di secondi che devono intercorrere tra due tentativi di sincronizzazione.
Per default questo valore è impostato a 7gg:

7gg*24ore*60minuti*60secondi = 604800 secondi

Ponendo che vogliate impostare un intervallo di sette ore, dovrete configurare il registro con valore 25200 (7*60*60=25200) con il seguente comando…

REG ADD HKLM\SYSTEM\CurrentControlSet\services\w32time\TimeProviders\NtpClient /v 
SpecialPollInterval /t REG_DWORD /d 25200 /f

Per continuare nella configurazione dei server NTP accreditati dobbiamo avviare il servizio, quindi sempre in console digitiamo…

net start w32time

oppure

sc start= w32time

(nota: il carattere spazio dopo il segno di = è richiesto)

e attendiamo che il servizio si avvii.

A questo punto dobbiamo farci la domanda ventilata in precedenza: vogliamo che il client si sobbarchi l’onere di interrogare altri server in caso il principale risulti irraggiungibile o vogliamo definire un unico server con la possibilità di modificarlo manualmente?

Lascio a voi la risposta: sappiate solo che mantenendo l’alternativa di selezione manuale del server (per altro quella già impostata per default) potrete-dovrete selezionare manualmente un server diverso nel caso quello definito risulti down, mentre con la gestione automatica sarà il client NTP a cercare una alternativa attiva in caso di difficoltà.

NOTA: ricordo che la modifica manuale del server NTP è anche una via semplice per modificare dinamicamente l’orario di riferimento da cui partirà il countdown per il successivo tentativo di sincronizzazione dell’orario.

Considerando attendibili i server ntp1.inrim.it, ntp2.inrim.it, ntp1.ien.it e ntp2.ien.it, se vorrete mantenere la selezione manuale scriverete (ad esempio) il comando…

w32tm /config /manualpeerlist:ntp1.inrim.it,0x9 /syncfromflags:manual /update

se invece preferite il full-auto scriverete…

w32tm /config “/manualpeerlist:ntp1.inrim.it,0x9 ntp2.inrim.it,0x9 
ntp1.ien.it,0x9 ntp2.ien.it,0x9“ /syncfromflags:manual /update

NOTA-1: nell’ultimo comando proposto il comado di definizione e i server sono racchiusi tra doppi apici (“”) e separati da un carattere spazio (…it,0x9 ntp2…) pena il ritorno di un errore.

NOTA-2: dopo il nome del server sono sempre riportati i caratteri “,0x9”, altro non è che una composizione di flags:0x1 per far considerare al servizio il sopra menzionato tempo tra sincronizzazioni (definito nel parametro SpecialPollInterval) e che i parametri immessi sono nomi DNS, non indirizzi IP, mentre 0x8 obbliga il servizio a far operare il client–NTP mediante richieste standard piuttosto che in symmetric active mode packets, quindi… 0x1 + 0x8 = 0x9.
Potrebbe interessarci anche il flag 0x2, infatti con questo flag possiamo definire un server NTP come server di emergenza che verrà usato se, e solo se, TUTTI gli altri server non rispondono alla richiesta di sincronizzazione. Continuando l’esempio precedente, ovviamente in base esadecimale, otterremo… 0x1 + 0x2 + 0x8 = 0xB

NOTA-3: per resincronizzare via linea comando (resettando all’ora del resync il countdown) potete usare le seguenti istruzioni.

w32tm /resync
[/computer:<computer>]
[/nowait]
[/rediscover]
[/soft]

Se avete optato per la possibilità di configurare manualmente quale sia il server che il sistema andrà a interrogare,dovrete-potrete necessariamente definire il database dei server selezionabili nel tab “Ora internet” richiamato precedentemente.

Digitiamo dunque (sovrascrivendo in parte o in toto i cinque record preesistenti) la nuova lista tramite l’istruzione di scrittura nei registry che specifica l’indice (0, 1, 2, …) e il nome come negli esempi che seguono…

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /v 0 /t REG_SZ /d 
“ntp1.inrim.it” /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /v 1 /t REG_SZ /d 
“ntp2.inrim.it” /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /v 2 /t REG_SZ /d 
“ntp1.ien.it” /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /v 3 /t REG_SZ /d 
“ntp1.ien.it” /f
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /v 4 /t REG_SZ /d 
“utcnist.colorado.edu” /f

Abbiamo finito: per completezza possiamo disabilitare il task in pianificazione eventi, ormai inutile, col comando…

SCHTASKS /Change /TN "\Microsoft\Windows\Time Synchronization\SynchronizeTime" /DISABLE

questa pagina potete trovare l’utility gratuita standalone Service Trigger Editor che permette di configurare tramite GUI i triggers dei servizi.


Trick: volendo far scomparire (ed eventualmente) ricomparire il Tab “Ora Internet” (come succede nel caso ci si trovi in un dominio) per impedire la sincronizzazione manuale tramite GUI, che porterebbe la sovrascrittura e conseguente cancellazione della lista dei server che fanno operare il client NTP in completa autonomia, basta digitare i seguenti comandi in una console amministrativa…

Per disabilitare:
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /ve /t REG_SZ /d 9999 /f
Per riabilitare:
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /ve /t REG_SZ /d 0 /f
Per una risincronizzazione estemporanea operare tramite command line con il comando:

w32tm /resync

Nota: se utilizzate emulatori software quali VirtualBox o VMPlayer, il servizio “Ora di windows” risulterà costantemente avviato causa le connessioni virtuali.

Possiamo ora riavviare il sistema e (in pratica) dimenticarci della sincronizzazione dell’orario tramite Internet.🙂

Pubblicato il 12 gennaio 2014, in Windows con tag , . Aggiungi il permalink ai segnalibri. 2 commenti.

  1. Bell’articolo, mi complimento!

  2. Ottimo articolo! Veramente completo e ben spiegato! Grazie🙂

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: