C'è un modo semplice per determinare l'ora in tick, usando la data tra ora e qualche ora domani.
C'è un modo semplice per determinare l'ora in tick, usando la data tra ora e qualche ora domani.
Risposte:
In cima alla mia testa - Guarderei la definizione UNIX di "Epoch Time" , capirei i tempi di inizio e fine dell'epoca di interesse, sottrarre e quindi ridimensionarlo a qualunque cosa.
Ora, sulla tua domanda specifica sull'uso del comando DATE (1), la pagina man UNIX per DATE (1) nel Manuale dei comandi generali di BSD ha questo esempio:
Finalmente il comando:
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"può essere utilizzato per analizzare l'output dalla data ed esprimerlo in Epoch time.
Sul mio sistema OSX, ottengo:
whmcclos@mbp:~
[3] date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
1391275286
Il date -r secondscomando si rivelerà probabilmente utile per i controlli di integrità con i valori di tempo di epoca calcolati:
whmcclos@mbp:~
[5] date -r 1391275286
Sat Feb 1 09:21:26 PST 2014
Ecco un altro approccio che potrebbe funzionare per te ...
Un'altra possibile implementazione per realizzare ciò che si sta tentando di fare sarebbe con il atcomando UNIX , supponendo che questo tipo di lavori in background vengano eseguiti mentre il sapore di xNIX è "inattivo". Sul mio sistema OSX sembra che i comandi specificati con il atcomando vengano eseguiti anche mentre OSX è "addormentato" - Ho "power nap" abilitato, se questo ha qualcosa a che fare con esso, ma offerto per te considerazione:
Innanzitutto, su OSX, il atcomando è disabilitato di default, quindi per prima cosa l'ho abilitato secondo la pagina man ATRUN (8) come segue:
Execute the following command as root to enable at run:
launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
Quindi, ho fatto un test del sonno come segue:
[61] date
Sat Feb 1 11:10:17 PST 2014
whmcclos@mbp:~
[62] at 11:11am today
touch $HOME/created-at-11:11am
job 9 at Sat Feb 1 11:11:00 2014
whmcclos@mbp:~
[63] date
Sat Feb 1 11:10:40 PST 2014
a questo punto, ho messo il mio laptop OSX a dormire, sono andato in cucina e ho fatto un'insalata, sono tornato ed ecco i risultati:
whmcclos@mbp:~
[64] echo "awakened now"; date
awakened now
Sat Feb 1 11:15:59 PST 2014
whmcclos@mbp:~
[65] ls -l ~/created-at-11\:11am
-rw-r--r--+ 1 whmcclos staff 0 Feb 1 11:11 /Users/whmcclos/created-at-11:11am
Quindi, potrebbe essere possibile che l'implementazione del tuo particolare atcomando permetta ciò che stai cercando di fare.
Devi stare molto attento quando usi le strutture temporali del kernel (tick e jiffies dovevano essere usati solo dallo scheduler per i processi multitasking e kernel interni).
Linux usa jiffies, non tick (Windows, Unix e BSD usano tick) e la quantità di tempo varia a seconda dell'architettura. Su una piattaforma x86 o AMD64, Linux ha 100 Jiffies al secondo (per impostazione predefinita, questo può essere modificato). Inoltre, non vi è alcuna garanzia che un Jiffy sia esattamente 10ms, che vari fattori possano cambiarlo un po 'ogni volta, e alla fine questo può aggiungere una differenza significativa.
Sempre più complicati, gli ultimi kernel sono senza tick, i loro kernel non si "svegliano" a intervalli regolari per fare il multitasking e tutto il resto. Invece ogni volta che viene eseguito un "risveglio", il kernel capisce quando deve svegliarsi successivamente e pianifica un timer di interruzione per attivarsi in quel momento. Su questi sistemi non esiste un tick o un jiffy con un'allocazione temporale costante.