每 n 秒复制一次
Posted
技术标签:
【中文标题】每 n 秒复制一次【英文标题】:Copy every n seconds 【发布时间】:2018-01-06 03:27:48 【问题描述】:我有一个睡眠和复制功能来检索在集群节点上运行的模拟的每日输出。基本上是这样的:
sleep_and_copy()
while true; do
sleep 85600s
copy_data
done
copy_data
将执行复制。问题是copy_data
需要很长时间才能执行。换句话说,我的副本仅每 85600 秒 + 一次复制一次。
有没有办法每 n 秒精确地执行一次复制?
【问题讨论】:
用copy_data &
替换copy_data
?
是否有一个 bash 函数来计时执行某事需要多长时间?还是给出当前时间的函数?只需计算花费了多少秒,从 85600 秒中减去它,然后为此休眠。
也许看看 cron 作业?
顺便说一句:看看 bash 的特殊变量 SECONDS:SECONDS=0; sleep 5; echo $SECONDS
85600 是错字,86400 是正确的值吗?那我推荐一个cronjob。
【参考方案1】:
要每 24 小时 (=86400 秒) 运行一次复制脚本,请使用 cron 作业!这也确保任务在重新启动后运行。
如果你真的想使用一个脚本并且每 85600s 运行一次,你可以简单地执行以下操作:
while true; do
sleep 85600s
copy_data &
done
&
启动 copy_data
在后台进程中执行的任何操作并立即返回。
【讨论】:
【参考方案2】:上述答案在技术上是正确的,但我倾向于等待第一个副本(以防它尚未完成),否则您可能会受到损坏:
while true; do
sleep 85600s
wait
copy_data &
done
【讨论】:
以上是关于每 n 秒复制一次的主要内容,如果未能解决你的问题,请参考以下文章