Программная синхронизация Dropbox без демона бега

Я хотел бы «вручную» принудительно синхронизировать Dropbox в определенное время (например, через регулярные, ежедневные интервалы, используя cron, как часть большего резервного скрипта). Моя цель - заменить демон dropbox одиночными вызовами команды sync только в те моменты, которые я контролирую.

Глядя на документацию по команде dropbox в Ubuntu, я вижу только способ запустить / остановить демон, но не заставить его синхронизироваться.

Есть ли доступный API нижнего уровня, который может это сделать?

7
задан 25 September 2013 в 14:49

3 ответа

Используя предложение @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 синхронизирует в управляемые времена, предполагая, что dameon не сообщает "Неактивный", пока он не закончил синхронизировать.


Править:

Это решение, кажется, работает на меня:

#!/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):
    
  • Для сокращения влияния на производительность системы, можно экспериментировать с утилитами такой как хороший, ионизироваться, и nocache, например:

    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
4
ответ дан 25 September 2013 в 14:49

Вот очень простой способ сделать это:

У меня медленное интернет-соединение, и я не хочу, чтобы 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
0
ответ дан 25 September 2013 в 14:49

Используя user84207 и Loony отвечает:

  • Создайте 2 сценария:

startDropbox.sh:

dropbox start

stopDropbox.sh:

result=$(dropbox status)
if [ "$result" = "Up to date" ];
then
   dropbox stop
fi
  • Добавить в crontab, crontab -e

# запускается только через каждые 5 минут
* / 5 * * * * startDropbox.sh
# пытаться останавливаться каждую минуту
* / 1 * * * * stopDropbox.sh

0
ответ дан 25 September 2013 в 14:49

Другие вопросы по тегам:

Похожие вопросы: