以编程方式同步 Dropbox,无需运行守护进程

以编程方式同步 Dropbox,无需运行守护进程

我想“手动”强制 Dropbox 在特定时间同步(例如,使用 cron 定期、每日间隔,作为大型备份脚本的一部分)。我的目标是仅在我控制的时间内用单个“同步”命令调用替代 Dropbox 守护进程。

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

是否有可用的低级 API 可以实现这一点?

答案1

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

while true; do dropbox status; sleep 1; done;

在另一个终端中:

touch ~/Dropbox/test

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

Idle
Idle
Idle
...
...
Updating (1 file)
Indexing 1 file...
Updating (1 file)
Indexing 1 file...
...
...
Downloading file list...
Downloading file list...
...
...
Idle
Idle

因此,我们可以定义一个脚本,使用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)

笔记

  • 根据您的 Dropbox 版本,您可能需要替换

    elif re.search("Idle", status):
    

    elif re.search("Up to date", status):
    
  • 为了减少对系统性能的影响,您可以尝试使用以下实用程序好的伊奥尼采, 和无缓存,例如:

    print subprocess.check_output(['nice', '-n10', 'ionice', '-c3', 'nocache', 'dropbox', 'start'])
    

使用以下方式设置脚本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

答案2

这是一个非常简单的方法来实现这一点:

我的网络连接很慢,我不想在白天工作时运行 Dropbox,但却希望它在我应该睡觉的时候整晚运行。

我设置了一个这样的 cron 任务:

在终端输入 crontab -e

添加以下行:

#This line will stop Dropbox at 7 AM every morning:
 * 7 * * * dropbox stop
#This line will start dropbox at 10 PM every evening:
 * 22 * * * dropbox start

答案3

使用用户84207疯子答案:

  • 创建2个脚本:

启动Dropbox.sh:

dropbox start

停止Dropbox.sh:

result=$(dropbox status)
if [ "$result" = "Up to date" ];
then
   dropbox stop
fi
  • 使用 crontab -e 添加 crontab

# 每 5 分钟启动一次
*/5 * * * * startDropbox.sh
# 尝试每分钟停止一次
*/1 * * * * stopDropbox.sh

相关内容