我想“手动”强制 Dropbox 在特定时间同步(例如,使用 cron 定期、每日间隔,作为大型备份脚本的一部分)。我的目标是仅在我控制的时间内用单个“同步”命令调用替代 Dropbox 守护进程。
查看dropbox
Ubuntu 上命令的文档,我只看到启动/停止守护进程的方法,但没有强制它同步。
是否有可用的低级 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