いつもは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アカウントと(サーバーのホスト名)をリンクしますか?」と表示されるので、「リンクする」をクリックします。
リンクが完了すると、以下のように「お使いのコンピュータとアカウントをリンクしました」と表示されます。
ここで「お使いのコンピュータ」が指しているのは、ブラウザを開いている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)"]