我想在Dropbox更新对目录所做的更改后自动执行一个过程(也可以在子目录中进行更改)。
为了使其工作,监视脚本应该等待Dropbox报告同步状态为已完成,因为我不想在只更新某些文件时启动操作,或者并行启动多个执行。
这必须在Linux上运行,我已经将Dropbox无头守护进程配置为运行。我也有dropbox.py脚本,它似乎能够报告是否进行了同步。
./dropbox.py status
Up to date
我正在考虑使用cron作业,但我确实希望最小化dropbox完成同步的时刻和触发执行的那一刻之间的延迟。每分钟使用Cron似乎不是一个好方法,我更喜欢使用某种触发器的东西,而不是一个愚蠢的轮询。
答案 0 :(得分:2)
我不知道Dropbox可以使用哪些触发器。这似乎是你与他们的支持部门联系的事情,因为他们毕竟是商业服务。
如果你发现自己陷入了轮询,你可以将你的python脚本包装在一个检查状态变化的循环中。
#!/usr/bin/env bash
postprocess() {
# This function contains stuff you run after sync is complete.
}
# Initialize a flag.
dirty=true
# How many seconds between checks?
interval=1
# Poll every second. You could increase this number to reduce impact.
while sleep $interval; do
if $dirty; then
if /path/to/dropbox.py status | grep -q 'Up to date'; then
dirty=false
postprocess
else
# Still syncing, no state change, try again in $interval seconds
continue
fi
else
if /path/to/dropbox.py status | grep -q 'Up to date'; then
# No updates happening, no state change
continue
else
dirty=true
fi
fi
done
我没有对此进行过明显的测试,但也许您可以根据自己的需要进行调整。请注意,较短的间隔意味着脚本将更准确地检测更改,更长的意味着它可能会错过它们。即使间隔为1秒,我也希望Dropbox客户端可以在1秒内启动并完成更改,因此您可能会错过任何内容。
如果您知道检测触发器的方法,请在此处发布您的代码,然后您会发现一大群人乐意帮助您完成工作。没有代码可以调试的问题是..好吧,实际上是偏离主题的! :)
答案 1 :(得分:1)
使用 inotify 系统。有一个命令行工具inotifywait
和一个python库。您可以收到有关正在创建,读取,写入后关闭等文件的通知
答案 2 :(得分:0)
结帐fswatch
。我以前用它来做类似的事情。这是我用过的程序的一行。
fswatch --print0 -e '/\.' $dir | xargs -0 -n1 ./client.py