有没有一种简单的方法来确定时间(以刻度为单位),使用日期 从现在到明天某个时间。
答案1
我首先想到的是——我会看看 UNIX 的定义“纪元时报”,找出感兴趣的开始和结束纪元时间,减去,然后将其缩放到任意值。
现在,关于您关于使用 DATE(1) 命令的具体问题,UNIX 手册页中有关 DATE(1) 的说明BSD 通用命令手册有这个例子:
最后命令:
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
可用于解析日期的输出并以纪元时间来表达。
在我的 OSX 系统上,我得到:
whmcclos@mbp:~
[3] date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
1391275286
该date -r seconds
命令可能会对您计算的纪元时间值的健全性检查有用:
whmcclos@mbp:~
[5] date -r 1391275286
Sat Feb 1 09:21:26 PST 2014
这是另一种可能适合您的方法……
完成您要执行的操作的另一种可能实现是使用 UNIXat
命令,假设这些类型的后台作业是在您的 xNIX 版本处于“睡眠”状态时运行的。在我的 OSX 系统上,似乎at
即使在 OSX 处于“睡眠”状态时,使用该命令指定的命令也会执行 - 我确实启用了“power nap”,如果这与此有关,但供您考虑:
首先,在 OSX 上,该at
命令默认是禁用的,因此我首先按照 ATRUN(8) 手册页启用它,如下所示:
Execute the following command as root to enable at run:
launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
然后,我做了睡眠测试,如下:
[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
此时,我让我的 OSX 笔记本电脑进入睡眠状态,去厨房做了一份沙拉,回来后,结果如下:
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
因此,特定命令的执行可能at
会允许您尝试执行的操作。
答案2
使用内核时间结构时必须非常小心(ticks 和 jiffies 仅供调度程序用于多任务和内部内核进程)。
Linux 使用 jiffies,而不是 ticks(Windows、Unix 和 BSD 使用 ticks),时间量因架构而异。在 x86 或 AMD64 平台上,Linux 每秒有 100 个 Jiffies(默认情况下,可以更改)。此外,不能保证 Jiffy 正好是 10ms,各种因素每次都会稍微改变它,最终这会累积成一个有意义的差异。
更复杂的是,最新的内核是无滴答的,它们的内核不会定期“唤醒”来执行多任务等。相反,每次“唤醒”完成后,内核都会确定下次需要唤醒的时间,并安排中断计时器在那时触发。在这些系统上,没有具有一致时间分配的滴答或 jiffy。