在不运行守护程序的情况下以编程方式同步保管箱

erj*_*lgo 7 sync cron dropbox

我想“手动”强制 dropbox 在特定时间同步(例如,使用 cron 定期、每天间隔,作为较大备份脚本的一部分)。我的目标是仅在我控制的时间用单个“同步”命令调用替换保管箱守护程序。

查看dropboxUbuntu上命令的文档,我只看到了一种启动/停止守护进程的方法,但没有强制它同步。

是否有可以实现此目的的较低级别的 api?

erj*_*lgo 4

根据@Rat2000的建议,我这样做了。在一个终端中,

while true; do dropbox status; sleep 1; done;
Run Code Online (Sandbox Code Playgroud)

在另一个终端中:

touch ~/Dropbox/test
Run Code Online (Sandbox Code Playgroud)

第一个终端显示大约以下输出:

Idle
Idle
Idle
...
...
Updating (1 file)
Indexing 1 file...
Updating (1 file)
Indexing 1 file...
...
...
Downloading file list...
Downloading file list...
...
...
Idle
Idle
Run Code Online (Sandbox Code Playgroud)

因此,我们可以定义一个脚本,使用expect,在受控时间执行一次性 Dropbox 同步,假设守护进程在完成同步之前不会报告“空闲”。


编辑:

这个解决方案似乎对我有用:

#!/usr/bin/python
import subprocess, time, re

print "Starting dropbox daemon"
print subprocess.check_output(['dropbox', 'start'])

started_sync = False
conseq_idle = 20
while True:
    status = subprocess.check_output(['dropbox', 'status'])
    print status
    if re.search("Updating|Indexing|Downloading", status):
        started_sync = True
        conseq_idle = 20
    elif re.search("Idle", status):
        conseq_idle-=1
        if not conseq_idle:
            if started_sync:
                print "Daemon reports idle consecutively after having synced. Stopping"
                time.sleep(5)
            else:
                print "Daemon seems to have nothing to do. Exiting"
            subprocess.call(['dropbox', 'stop'])
            break
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

注意事项


设置脚本anacron

当然,我安排这个脚本通过 anacron 运行,如下所示:

1 10  dropbox_do_sync  su myuser -p -c "python /home/myuser/scripts/dropbox_do_sync.py" >> /home/myuser/logs/anacron/dropbox_do_sync
Run Code Online (Sandbox Code Playgroud)