The UNIX and Linux Forums  

Go Back   UNIX e Linux Forum > Inizio Forum > UNIX for Dummies Domande & Risposte > Risposte alle domande più frequenti > Suggerimenti e Tutorial
.
google unix.com



Suggerimenti e Tutorial Articoli utili da parte dei nostri utenti.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
Capire questo Makefile the_learner Di programmazione ad alto livello 5 06-14-2007 02:55 AM
Hai bisogno di aiuto intesa Unix Comando chris86 UNIX for Dummies Domande & Risposte 6 10-10-2006 04:35 PM
Un po 'di aiutare la comprensione FIFO? Deckard Linux 0 11-01-2005 01:46 PM
necessità di una maggiore comprensione init.d jigarlakhani UNIX e avanzata per utenti esperti 1 09-20-2002 04:11 PM

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.125
Intesa Unix Cronometraggio

Tempo interno
Internamente, un sistema Unix mantiene momento in cui il numero di secondi dalla Unix Epoch. La Unix Epoch è stato, a mezzanotte, 1 gennaio, 1970 UTC. Nel fuso orario orientale degli Stati Uniti che è stato dicembre 31, 1969 alle 19:00. Come iniziare questo articolo, il tempo è 1171733878. Sto usando NTP (Network Time Protocol) per mantenere il mio orologio del computer in sincronia. Così l'esatto istante che il mio computer è stato pensato 1171733878, probabilmente lo ha fatto a te. Ogni computer dovrebbe essere d'accordo su quanto tempo si trova. Non importa in quale fuso orario del computer o in cui risiede il fuso orario residenza. Se avessi scritto in un file durante la seconda che, Unix avrebbe registrato come la data dell'ultima modifica 1171733878.

Unix è stata tradizionalmente un numero intero a 32 bit firmato. Ciò significa che di tempo massimo che è 2147483647, nel TimeZone orientale degli Stati Uniti sarebbe gennaio 18, 2038 alle 22:14:07. Il piano è destinato ad espandersi ad un intero a 64 bit prima di allora. Unix secondo contare avanti uno per uno. Dopo 1171733878, la prossima seconda che il mio sistema di conoscere è 1171733879. Una volta che è syncronized, NTP funziona accorciando o allungando un secondo. Sono in grado di ottenere il tempo di rimettere la chiamata di sistema tempo (). Se voglio qualcosa di meglio di secondi, il prossimo più accurata è la chiamata di sistema volte (). volte () scopo principale è quello di ottenere una struttura di dati relativi al sistema di utilizzo. Ma il codice di ritorno è anche utile ... è l'ora di orologio zecche. Orologio zecche inizio a un certo punto arbitrario nel passato (spesso boot) e anticipo se il kernel di routine orologio corre. Come molti di clock al secondo zecche possono variare. È possibile chiamare sysconf (_SC_CLK_TCK) per trovare il tuo valore. 100 è il valore comune in questi giorni. I vecchi sistemi usati 60. 100 e 60 sono gli unici due valori che ho visto. Orologio zecche sono tornati anche firmato un numero intero. Così, dopo circa un anno, il numero di ripristinare a zero. Diverso da quello di ribaltamento, orologio zecche anticipo anche uno per uno. (Orologio zecche sono spesso chiamati "jiffies" da Linux gente.) C'è anche un altro sistema di chiamata, gettimeofday () che restituisce il tempo in quanto la Unix Epoch in pochi secondi e microsecondi. gettimeofday () è necessario per esistere e di uso microsecondo precisione. Tuttavia, la precisione è espressamente specificato. L'anticipo non microsecondi uno per uno, in ogni sistema che ho visto. Presumo che i sistemi Unix sono abbastanza buone con centesimi di secondo, e forse anche alcuni casi è millisecondi. Ma io non assume alcuna precisione al di là di questo.

Leggibile Timestamp
Ora che sappiamo come Unix mantiene tempo, si sposta su un oggetto diverso: come visualizzare il tempo di un utente. Pochi utenti saranno felici con un timestamp visualizzato come 1171733878. Dato che io sono nel fuso orario orientale degli Stati Uniti, vorrei vedere qualcosa di simile a 12:37:58 feb 17, 2007. Ma una persona a Los Angeles, California vorrebbe qualcosa di simile 9:37:58 il Feb 17, 2007. Ho scritto un po ' perl script per visualizzare il formato di un momento in cui, come numero 1171733878. Ecco l'output come dovrebbe apparire in entrambi i fusi orari orientale e del Pacifico per qualche ora accuratamente selezionati:
Orientale:
1173596399 domenica 2007-03-11 01:59:59 Standard Time
1173596400 domenica 2007-03-11 03:00:00 Ora legale
1173607199 domenica 2007-03-11 05:59:59 Ora legale
1173607200 domenica 2007-03-11 06:00:00 Ora legale
Pacifico:
1173596399 sabato 2007-03-10 22:59:59 Standard Time
1173596400 sabato 2007-03-10 23:00:00 Standard Time
1173607199 domenica 2007-03-11 01:59:59 Standard Time
1173607200 domenica 2007-03-11 03:00:00 Ora legale
Si noti che il tempo di Unix non cambia con l'inizio di ora legale. Quello che succede è che una nuova regola per il modo per visualizzare l'ora in vigore. Per la conversione a tempo interno un timestamp, Unix ha bisogno di sapere che il fuso orario da utilizzare. E ha bisogno di sapere se è legale in vigore. Ci sono varie subroutine che possono essere chiamati a formattare un timestamp. Tutti questi eventualmente invocare tzset () per determinare il fuso orario e lo stato di legale. E tzset controlla sempre per la variabile d'ambiente TZ per capire ciò che l'utente vuole. Se non uno variabile di ambiente TZ, tzset () andrà con una sorta di default che può variare da sistema a sistema. La variabile di ambiente TZ è spesso destinata a qualcosa di simile EST5EDT4 che è ciò che io utilizzo. Questo dice che io sono in un fuso orario EST chiamata che è compensata da Universal Time di 5 ore e durante il giorno il mio legale del fuso orario è chiamato CET che è compensato da Universal Time di 4 ore. Per sapere se è legale in vigore, tzset sarà in alcuni file di dati. Quali file (e il formato del file è in) varia da sistema a sistema. Le patch che sono disponibili per l'anno in corso del cambiamento dell'ora legale in realtà dovrebbe essere poco più di alcune revisioni di questi file.

Universal Time
Oltre a conoscere il proprio fuso orario, un sistema UNIX deve essere in grado di utilizzare il tempo universale (che è quasi lo stesso del vecchio Greenwich Mean Time). Questo è ciò che "data-u" fa. La definizione di "tempo universale" è ben noto, e non comporta l'ora legale modifiche. Il Tempo universale definizione può essere integrata in data routine piuttosto che utilizzare il file di dati per tzset (). Ciò può essere vero anche se è presente una voce per UTC. Spesso utilizzano programmi di posta timestamp UTC.
  #2 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.125
Legale stabilito sono cambiate e non ho alcuna patch .... Cosa fare?

Diciamo che il mio sistema è ancora istituito l'anno scorso per la regola. Il mio sistema sarà presto mostrare l'ora sbagliata. Che cosa devo fare? Una cosa che è non una buona idea sarebbe quella di manovella l'orologio avanti di un'ora manualmente. Se io che il mio sistema avrà sbagliato il tempo interno. Alcuni servizi basati su rete, come NFS utilizzare il tempo interno. Il mio sistema inoltre non hanno più la corretta Universal Time. NTP (Network Time Protocol) e il mio sarà un malfunzionamento del sistema orologio deriva. Anche per il mio fuso orario, mi avrebbe come timestamp 17:00 EST quando avrei dovuto 17:00 CET. Poche settimane dopo, la vecchia regola avrà effetto e sarà ora necessario regolare nuovamente l'orologio manualmente.

Spero che mi hanno convinto a non azzerare il tempo in questo modo. Una soluzione migliore sarebbe quella di ricerca il mio sistema di file di dati che definisce le regole per l'ora legale del fuso orario e modificare il mio io. Questo dovrebbe essere un semplice cambiamento. Ma ogni sistema può avere il proprio formato.

Ci sembra di essere una soluzione universale vicino: utilizzare un formato più complesse per la variabile d'ambiente TZ. Si può effettivamente mettere il legale regola TZ e questo comportamento è ordinato dalla Posix. Di seguito viene riportata una tabella delle impostazioni TZ che credo di essere corretta per l'anno 2007.
Codice:
# Posix Format
TZ="EST5EDT4,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Eastern
TZ="CST6CDT5,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Central
TZ="MST7MDT6,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Mountain
TZ="PST8PDT7,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Pacific
TZ="AST9ADT8,M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Alaska
TZ="HST10"                                       # US Hawaii

# Old System V Release 3.1 and Xenix Format
TZ="EST5EDT4;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Eastern
TZ="CST6CDT5;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Central
TZ="MST7MDT6;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Mountain
TZ="PST8PDT7;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Pacific
TZ="AST9ADT8;M3.2.0/02:00:00,M11.1.0/02:00:00"   # US Alaska
TZ="HST10"                                       # US Hawaii
  #3 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.125
Considerazioni Per cron

cron Intende rispondere ai cambiamenti nel tempo
Se si regola l'ora del sistema, mentre cron è in esecuzione, si nota cron e tentare di compensare. Se il tempo passi indietro, cron verrà sospesa posti di lavoro e di attendere per l'orologio indietro di anticipo per eseguire cron in cui l'ultimo lavoro. Se il tempo spostata in avanti, cron tenterà di recuperare il tempo perduto. Si scegliere se continuamente ogni minuto fino a quando non ha eseguito tutti i lavori programmati nel corso del tempo la durata saltato. Se siete semplicemente modificare l'orologio di sistema perché si è spento a pochi secondi, questo è perfetto. Ma se il tempo è un anno sabbatico, probabilmente non sarà una buona cosa. Per le grandi adattamenti l'orologio si dovrebbe uccidere e riavviare cron.

cron risponderà alle modifiche dell'ora legale
Supponiamo che ho un lavoro pianificato per essere pubblicato a 2:15 Domenica mattina. Quando noi "primavera in anticipo", non ci sarà un 2:15. cron si nota che "sospesa avanti" di 60 minuti, quindi si aggiungono 60 minuti per il mio lavoro ora ottenere 3:15. Si eseguire il lavoro a 3:15 ... a meno che il lavoro era già stato programmato per eseguire sia a 2:15 e 3:15. In tal caso, il mio lavoro verrà eseguito una sola volta a 3,15.

Più tardi nel corso dell'anno, abbiamo "ripiegare". Su questa Domenica, sarà 2:15 due volte. Il mio lavoro viene eseguito solo alla prima 2:15. Se il mio lavoro è prevista per la durata a 15 minuti dopo ogni ora attraverso l'esplicito uso di un asterisco nel campo ora il mio lavoro verrà eseguito sia a 2:15 's. Questo non è vero, se io uso una serie o un elenco di ore per l'esecuzione. Solo posti di lavoro con un asterisco per il campo ora gestiti a livello sia 2:15 's.

cron ha il proprio fuso orario
Se il mio lavoro per pianificare 2:15 del mattino, cron verrà eseguito quando si pensa che il tempo è 2:15. cron è strettamente legato alla "a" comando. Se al posto di lavoro attraverso il programma "a" correre in 2:15, il mio variabile TZ è ispezionato e il lavoro verrà eseguito al mio 2:15. Cron, ma non funziona in questo modo.
  #4 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.125
Leap Secondi

La definizione di un secondo è fissato attentamente. Ogni secondo è esattamente come a lungo di qualsiasi altro secondo. Quando gli scienziati sono stati vincolare il preciso valore di un secondo, che ha trovato esattamente come possibile per l'anno 1900. Ci sono 24 * 60 * 60 \u003d 86400 secondi in un giorno. Ma la Terra ha rallentato un po 'in gran parte a causa di forze di marea. Ogni anno, ha bisogno di circa ,7 secondi extra. Ogni ora e poi abbiamo un giorno con 86.401 secondi. Unix cerca di far finta che questo non è il caso. Se non si sta eseguendo NTP, è necessario modificare manualmente periodicamente il vostro orologio e si compensare per un salto di secondo durante la tua prossima regolazione manuale.

Se si esegue NTP, Unix cerca di rendere l'ultimo secondo della giornata con un ultimo salto di secondo per 2 secondi. Con molte implementazioni, la seconda impropriamente anticipo al centro di questo secondo tempo e sarà regolato indietro pochi millisecondi dopo.

Quindi, ignorando il potenziale disordinato secondo lungo di transizione, in cui trattiamo ogni giorno come se si trattasse di 86400 secondi.

A proposito, ci sono voluti circa un secolo per la Terra di rallentare abbastanza per necessità ,7 secondi extra di ogni anno. Ci vorrà un altro secolo per rallentare abbastanza per bisogno di circa 1,4 secondi extra anni. Non pensate che ogni anno è secondo ,7 più rispetto al suo immediato predecessore.
  #5 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.125
Il mio script in Perl

Qui è la mia Perl script che ho usato in questo articolo ...
Codice:
#! /usr/local/bin/perl


sub printtime($)
{
        @d=localtime $_[0];
        printf "%12d  %3s %4d-%02d-%02d %02d:%02d:%02d %s\n", $_[0],
                (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$d[6]],
                $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0],
                ("Standard Time","Daylight Saving Time")[$d[8]];
}

while (do {print "Enter val - "; chomp($val = <>)}) {
        print "val = ", $val, "\n";
        printtime $val;
        printtime $val+1;

}
print "\n";
Ecco come verificare che il fuso orario di dati sia corretto. Ho appena calcolare a mano il secondo, quando mi aspetto che il legale per attivare e utilizzare questo script per vedere se funziona ...
  #6 (permalink)  
Old 02-20-2007
Perderabo's Avatar
Perderabo Perderabo is online now Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.125
Varie Quote e scade il

Il tuo OS, pone dei limiti alla intervallo di date che può Formato
Hai bisogno di controllare la documentazione per il proprio sistema per il quale è in grado di gestire le date.

Ad esempio, HP-UX 11i versione 2 dice:
Il minimo supportato dalla data mktime () in entrambi a 32 bit e 64-bit di HP-UX è Venerdì 13 dicembre 20:45:52 UTC 1901. Il massimo supportato da date mktime () sono Martedì 19 gennaio 03:14:07 UTC 2038 e Venerdì 31 dicembre 23:59:59 UTC 9999 in 32 bit di HP-UX e 64-bit di HP-UX, rispettivamente. Se il calendario non può essere rappresentato, la funzione restituisce il valore (time_t) -1 e fissa errno a ERANGE. Nota il valore (time_t) -1 corrisponde anche al momento sul 23:59:59 dicembre 31, 1969 (più o meno il fuso orario e ora legale adeguamenti). Pertanto, è necessario verificare sia il valore di ritorno e errno affidabile per individuare una condizione di errore.

Solaris 10 dice:
Il fuso orario zoneinfo file di dati non transizione passato martedì gennaio 19 03:14:07 2038 UTC. Pertanto, per applicazioni a 64 bit utilizzando zoneinfo fusi orari, i calcoli al di là di questa data non può compensare il corretto uso da tempo standard, e potrebbe tornare valori errati. Questo riguarda la versione a 64 bit di localtime (), localtime_r (), ctime (), e ctime_r ().

Nanosecondo risoluzione
Ho notato che Posix specifica una varietà di nanaosecond risoluzione routine. Vedo che Solaris 10 ha attuato loro. Io non ho alcuna esperienza con loro e mi hanno ignorato per questo thread. Il clock_settime (3RT) pagina man dice:
Citazione:
Un clock_id di CLOCK_HIGHRES rappresenta la nonadjustable, ad alta risoluzione per l'orologio di sistema. Per questo orologio, il valore restituito da clock_gettime (3RT) rappresenta la quantità di tempo (in secondi e nanosecondi), in quanto alcuni arbitrario in passato, non è correlata in alcun modo l'ora del giorno e, quindi, non è soggetto a il ripristino o deriva dal modo di adjtime (2), ntp_adjtime (2), settimeofday (3C), o clock_settime (). Il tempo fonte di questo orologio è la stessa di quella per gethrtime (3C).
Ciò implica che la risoluzione nanosecondo routine non siano destinati al cronometraggio. D'altra parte, vedo ora ls-E ha una opzione per visualizzare file di volte in nanosecondi.

Se si visualizza il tempo in nanosecondi, assicurarsi di tenere gli occhi molto vicino allo schermo. La luce non può viaggiare anche a pieno piede in un nanosecondo.

Approfondimenti
Accertarsi di leggere tre, mtime, ctime, e atime per informazioni sui timestamp dei file.
 

Segnalibri

Tag
orologio, mtime, cronometraggio

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 10:15 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0