Mit dem Vorschlag von @ Rat2000 habe ich dies getan. In einem Terminal,
while true; do dropbox status; sleep 1; done;
In einem anderen Terminal:
touch ~/Dropbox/test
Das erste Terminal zeigt ungefähr die folgende Ausgabe:
Idle
Idle
Idle
...
...
Updating (1 file)
Indexing 1 file...
Updating (1 file)
Indexing 1 file...
...
...
Downloading file list...
Downloading file list...
...
...
Idle
Idle
Wir können also ein Skript definieren, mit dem expect
zu kontrollierten Zeiten eine einmalige Dropbox-Synchronisierung durchgeführt wird, vorausgesetzt, der Dameon meldet "Leerlauf" erst, wenn die Synchronisierung abgeschlossen ist.
Bearbeiten:
Diese Lösung scheint für mich zu funktionieren:
#!/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)
Anmerkungen :
Abhängig von Ihrer Dropbox-Version müssen Sie diese möglicherweise ersetzen
elif re.search("Idle", status):
mit
elif re.search("Up to date", status):
Um die Auswirkungen auf die Systemleistung zu verringern, können Sie mit Dienstprogrammen wie nice , ionice und nocache experimentieren , z.
print subprocess.check_output(['nice', '-n10', 'ionice', '-c3', 'nocache', 'dropbox', 'start'])
Einrichten des Skripts mit anacron
Natürlich plane ich, dass dieses Skript wie folgt über Anacron ausgeführt wird:
1 10 dropbox_do_sync su myuser -p -c "python /home/myuser/scripts/dropbox_do_sync.py" >> /home/myuser/logs/anacron/dropbox_do_sync