特定の時間(たとえば、より大きなバックアップスクリプトの一部として、cronを使用して定期的に、毎日の間隔)でDropboxを「手動で」強制的に同期させたいと思います。私の目標は、ドロップボックスデーモンを、自分が制御する時間のみに単一の「同期」コマンド呼び出しで置き換えることです。
Ubuntuでdropbox
コマンドのドキュメントを見ると、デーモンを開始/停止する方法しかわかりませんが、強制的に同期させることはできません。
これを達成できる低レベルのAPIはありますか?
@ Rat2000の提案を使用して、これを行いました。 1つの端末で、
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
を使用して、dameonが同期が完了するまで「アイドル」を報告しないと仮定して、制御された時間に一度だけ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):
システムパフォーマンスへの影響を減らすために、 Nice 、 ionice 、 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
これを実現する非常に単純な方法を次に示します。
インターネット接続が遅く、仕事中の日中はDropboxをまったく実行したくありませんが、眠っているはずの夜中は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
ser84207およびLoonyの回答を使用:
startDropbox.sh:
dropbox start
stopDropbox.sh:
result=$(dropbox status)
if [ "$result" = "Up to date" ];
then
dropbox stop
fi
#5分ごとにのみ開始
*/5 * * * * startDropbox.sh
#毎分停止しよう
*/1 * * * * stopDropbox.sh