【发布时间】:2018-10-28 16:14:50
【问题描述】:
在我们用于构建的 macOS 虚拟机上,有时会无缘无故地跳出时间。作为一种解决方法,我创建了这个名为 test.sh 的脚本,它始终如一地更正时间:
#!/bin/bash -e
while true; do
sudo ntpdate -u de.pool.ntp.org >> ntpdate.txt; sleep 30;
done
在构建开始时,它会在后台启动:
./test.sh &
当构建完成时,我正在杀死它:
kill $(ps aux | grep test.sh | grep -v grep | awk '{print $2}')
有时调用更新时间需要超过 30 秒。然后有两个对 ntp 池的开放调用,我得到了速率限制响应。因此,我想将对 ntp 的调用限制为一次只能调用一个。如何在我的 while true 循环中实现这一点?
【问题讨论】:
-
你可以试试
kill %1或pkill -f test.sh -u $USER来代替复杂的grep/grep/awk 的东西。 -
您的构建过程不必担心设置时间。将 VM 配置为通过
launchd以所需的时间间隔运行 ntpdate,并让构建过程假定时钟正确。 -
您的代码已经仅在上一个命令完成时继续执行...除非您同时进行两个单独的构建,从而运行两个独立的循环。
-
...处理两个独立构建的情况,请参阅Linux flock, how to “just” lock a file?
-
这应该会有所帮助...stackoverflow.com/a/37303133/2836621