![如何计算 shutdown -r +${MINUTES} 的最大值?](https://linux22.com/image/135047/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%20shutdown%20-r%20%2B%24%7BMINUTES%7D%20%E7%9A%84%E6%9C%80%E5%A4%A7%E5%80%BC%EF%BC%9F.png)
我使用 CentOS 7.5.1804 和 GNU bash 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)。
对于维护时段内的计划重新启动,我计算从现在到下次重新启动的分钟数。例如,要在大约 3 个月内重新启动,我会使用
shutdown -r +129600
由于有兴趣更好地了解 bash,我很好奇最高值是什么以及如何计算它?
使用 int32 进行的计划关闭将报告
shutdown -r +4294967295
Shutdown scheduled for Tue 10184-07-27 ...
更高的值仍然是可能的,但是如何计算可能的最大值?
答案1
在我的机器上,/sbin/shutdown 是 /sbin/systemctl 的符号链接。
在 systemctl 源中探究(https://code.launchpad.net/~ubuntu-branches/ubuntu/trusty/systemd/trusty), 我懂了
- 这
shutdown_parse_argv
函数将时间规范解析为名为的变量,arg_when
其类型为usec_t
- 这
send_shutdownd
函数sd_shutdown_command
使用该 usec_t 值创建一个结构体 这
sd_shutdown_command
结构体包含:/* Microseconds after the epoch 1970 UTC */ uint64_t usec;
所以,最长时间似乎是:
$ \bc <<< '(2^63-1) / 10^6 / 60' # minutes
153722867280
$ \bc <<< '(2^63-1) / 10^6 / 60 / 24 / 365' # years
17548272
话又说回来,我没读过parse_time_spec
函数来查看参数实际上如何解析为时间值。