当被调用的命令尚未完成时,“watch”会发生什么?

Mic*_*ael 2 rsync watch

服务器产生大量数据,我希望尽可能连续地下载这些数据。最简单的想法是使用

watch rsync ...
Run Code Online (Sandbox Code Playgroud)

据我了解,watchrsync每 2 秒调用一次。

那么关键问题是:如果rsync在这 2 秒内没有退出会发生什么?rsync无论如何,它会每 2 秒开始一个新的,还是会等到前一个rsync终止?

Ste*_*itt 5

您可以通过运行类似的东西来检查这一点

watch "date >> watch.log; echo Sleeping; sleep 10"
Run Code Online (Sandbox Code Playgroud)

这将使用默认的两秒间隔。如果你让它运行一会儿,你会看到它watch.log每十二秒记录一次日期和时间——所以watch运行它的命令,等待它完成,然后在再次运行命令之前等待配置的时间间隔。


Jar*_*era 3

符合测试

watch updatedb
Run Code Online (Sandbox Code Playgroud)

它会等待程序完成,然后再开始另一个会话。

我不确定使用 watch 运行 rsync 是否有意义。如果要触发定期运行,请使用 cron。

如果您想更频繁地运行 rsync,请编写带有永远循环的脚本(而 true 则这样做)并使用 pgrep 来检测正在运行的 rsync。如果检测到,请等待定义的时间并在周期的另一次迭代中进行测试。