J'aimerais forcer "manuellement" Dropbox à se synchroniser à certains moments (par exemple, à intervalles réguliers et quotidiens à l'aide de cron, dans le cadre d'un script de sauvegarde plus important). Mon objectif est de remplacer le démon dropbox par un seul appel de commande "sync" aux heures que je contrôle.
En regardant la documentation de la commande dropbox
sur Ubuntu, je ne vois qu'un moyen de démarrer/arrêter le démon, mais pas de le forcer à se synchroniser.
Y a-t-il une api de niveau inférieur disponible qui peut accomplir cela?
En utilisant la suggestion de @ Rat2000, je l'ai fait. Dans un terminal,
while true; do dropbox status; sleep 1; done;
Dans un autre terminal:
touch ~/Dropbox/test
Le premier terminal affiche à peu près la sortie suivante:
Idle
Idle
Idle
...
...
Updating (1 file)
Indexing 1 file...
Updating (1 file)
Indexing 1 file...
...
...
Downloading file list...
Downloading file list...
...
...
Idle
Idle
Ainsi, nous pouvons définir un script, en utilisant expect
, pour effectuer une synchronisation ponctuelle à l'aide d'une boîte de dépôt à des heures contrôlées, en supposant que le dameon ne signale pas "inactif" jusqu'à ce que la synchronisation soit terminée.
Modifier:
Cette solution semble fonctionner pour moi:
#!/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)
Notes :
En fonction de votre version de Dropbox, vous devrez peut-être remplacer
Elif re.search("Idle", status):
avec
Elif re.search("Up to date", status):
Pour réduire l'impact sur les performances du système, vous pouvez expérimenter avec des utilitaires tels que Nice , ionice et nocache , par exemple:
print subprocess.check_output(['Nice', '-n10', 'ionice', '-c3', 'nocache', 'dropbox', 'start'])
Configuration du script avec anacron
Bien sûr, je planifie l'exécution de ce script via Anacron, comme suit:
1 10 dropbox_do_sync su myuser -p -c "python /home/myuser/scripts/dropbox_do_sync.py" >> /home/myuser/logs/anacron/dropbox_do_sync
Voici un moyen très simple d'accomplir ceci:
J'ai une connexion Internet lente et je ne veux pas du tout que Dropbox fonctionne toute la journée lorsque je travaille, mais le souhaite toute la nuit quand je suis censé être endormi.
J'ai créé un travail cron comme ça:
A un terminal de type crontab -e
Ajoutez ces lignes:
#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
Utiliser ser84207 et Loony répond:
startDropbox.sh:
dropbox start
stopDropbox.sh:
result=$(dropbox status)
if [ "$result" = "Up to date" ];
then
dropbox stop
fi
# commence seulement après chaque 5 minutes
*/5 * * * * startDropbox.sh
# essayer d'arrêter chaque minute
*/1 * * * * stopDropbox.sh