嗨,我有一个由systemd服务调用的bash脚本,它需要运行到下一个小时开始。目前我一直在使用:
currentTime=$(date +"%s")
nextHour=$(date -d "$(date -d 'next hour' '+%H:00:00')" '+%s')
duration=$(((nextHour-currentTime)*1000))
据我所知,除了试图计算晚上11点和午夜之间的差异外,其他方法都是有效的,即从23小时前的午夜到现在的午夜。
Oct 13 23:00:05 host bash[2019]: 1665698405
Oct 13 23:00:05 host bash[2019]: 1665615600
Oct 13 23:00:05 host bash[2019]: -82805000
我想如果需要的话,我可以用不同的计算进行条件检查,或者查看触发服务的systemd计时器,但由于服务需要在启动/重新启动时始终激活,并且需要逐小时运行,因此这种设置似乎更合适。
如果有任何关于为什么会发生这种情况的建议,以及关于避免这种情况的最简化步骤的建议,我们将不胜感激。
这实际上不是关于bash
的问题,但似乎更多的是关于date
的问题。考虑到date
有多种不同的实现方式,选择不同的工具进行计算似乎更明智。我怀疑perl
更标准化,(几乎(与date
一样可用,所以您可以尝试使用来获得差异
perl -MTime::Seconds -MTime::Piece -E '
my $t = localtime; my $m = ($t + ONE_HOUR)->truncate(to => "hour"); say $m - $t'