[memo]CentOS6でDropboxと同期する(CUI)


いつもはfedora20のノートPCとスマホをDropboxで連携しているのですが、Dropboxへ定期的にファイルを保存するシェルスクリプトを書きたいなーということで、CentOS6で運用しているサーバー(以下サーバーと書きます)でDropbox連携させてみました。ノートPCはGUI(Gnome)ありなのでnautilusと連携しているのですが、寝ている間もcron処理させたいですものね。

今回はすでにDropboxのアカウントを取得して、WEBブラウザからログインできる前提で手順を書いていきます。と言っても、こちらのサイトのほぼ○パクりで、Dropbox アカウントの作成 〜 Dropbox デーモンをインストール までまったく同じ手順です。なお、他のユーザー(UNIXシェルアカウント)と共有するつもりはなく、多少の同期ラグがあってもいいやという運用方針なので、超簡単手順にしています。

今回の作業ですが、途中でURLのコピペを行う箇所があるので、コンソールではなくsshでの作業を推奨します。

■ dropbox-lnx をダウンロードする

サーバーにsshログインし、以下コマンドを実行して、Dropboxをダウンロードします。

$ wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

 

■ Dropbox管理コマンド「dropbox.py」をダウンロードする

あらかじめホームディレクトリの下に bin ディレクトリを作成しておき、dropbox.pyをダウンロードします。

$ wget -O ${HOME}/bin/dropbox.py "http://www.dropbox.com/download?dl=packages/dropbox.py"

ダウンロード後、dropbox.pyに実行権を付与します。

$ chmod 755 ${HOME}/bin/dropbox.py

 

■ Dropboxアカウントとサーバーをリンクする

通常はdropbox.pyから起動停止などを行うのですが、初回起動だけは、dropboxdを直接起動します。このコマンドは何も引数をつけずフォアグラウンドで実行します。

$ ${HOME}/.dropbox-dist/dropboxd

上記コマンド実行後、以下のメッセージがターミナルに表示されるので、URLをコピペしてブラウザに貼り付けて実行してください。なお、このページを開く際には、あらかじめブラウザでDropboxにログインしておいてください。

このコンピュータは Dropbox アカウントにリンクされていません...
このデバイスをリンクするには、https://www.dropbox.com/cli_link_nonce?nonce=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX にアクセスしてください。

上記メッセージからリンクをコピペしてブラウザで開くと、以下のように「Dropboxアカウントと(サーバーのホスト名)をリンクしますか?」と表示されるので、「リンクする」をクリックします。

20150423_Dropbox_001001

リンクが完了すると、以下のように「お使いのコンピュータとアカウントをリンクしました」と表示されます。

20150423_Dropbox_002001

ここで「お使いのコンピュータ」が指しているのは、ブラウザを開いているPCではなく、先ほどDropboxをインストールしたサーバーです。

ここまでできたら、sshクライアントに以下のメッセージが表示されているはずです。

このコンピュータは Dropbox にリンクされました。ようこそ、<あなたのお名前> さん。

ようこそのメッセージを確認したら、Ctrl+Cでdropboxを停止します。

 

■ Dropboxをデーモンとして起動させる

先ほどdropboxをフォアグラウンドで起動しましたが、デーモンとして動かすには、もう1つダウンロードしたdropbox.pyを使うと便利です。dropbox.pyの実行環境はpython 2.6以降ですが、CentOS 6.6であれば実行環境の要件は満たしているはずです。

$ cat /etc/redhat-release 
CentOS release 6.6 (Final)

 

$ rpm -q python
python-2.6.6-52.el6.x86_64

まずは、現在dropboxが停止していることを確認します。

$ dropbox.py status
Dropbox isn't running!

それではdropboxを起動しましょう。

$ dropbox.py start
Starting Dropbox...Dropbox isn't running!
Done!

現在のステータスを確認します。まだ同期が始まっていないと以下のような表示になります。

$ dropbox.py status
開始中...

しばらくすると、同期が開始されます。whileループで様子を見てみましょう。

$ while :; do date; dropbox.py status; echo ; sleep 1; done
2015年  4月 23日 木曜日 11:56:15 JST
同期中(残り 1,648 件のファイル, 残り 2 分)
1,648 件のファイルをダウンロード中 (3,099KB/秒、残り 2 分)

2015年  4月 23日 木曜日 11:56:16 JST
同期中(残り 1,648 件のファイル, 残り 2 分)
1,648 件のファイルをダウンロード中 (3,099KB/秒、残り 2 分)

2015年  4月 23日 木曜日 11:56:17 JST
同期中(残り 1,630 件のファイル, 残り 3 分)
1,630 件のファイルをダウンロード中 (3,099KB/秒、残り 3 分)

... (略)

同期が完了すると、以下のように表示されるので、Ctrl+Cでループを抜けます。

2015年  4月 23日 木曜日 12:00:29 JST
最新の状態

 

■ Dropboxの起動を監視する

5分に1回、dropboxが起動していなければ起動するシェルスクリプトをcronで回します。

$ cat ${HOME}/bin/BOXCHECKER 
#!/bin/bash
set -ue
LANG=ja_JP.utf8
LC_ALL=ja_JP.utf8

DROPBOX_PY=${HOME}/bin/dropbox.py

##--@--## Dropboxが停止していたら起動する
[ "$(${DROPBOX_PY} status)" = "Dropbox isn't running!" ] && ${DROPBOX_PY} start
$ crontab -l
2-57/5 * * * * ${HOME}/bin/BOXCHECKER 2>&1

とりあえずはこんな感じでよさそうです。サーバーで追加削除したファイルやディレクトリを、PCやスマホでそれぞれ同期されていること、またはその逆にスマホやPCで追加削除したファイルやディレクトリがサーバーでも同期されていることが確認できればOKです。

[amazonjs asin="B00JYSCL6A" locale="JP" title="今からはじめる!Dropbox 超入門 (impress QuickBooks)"]