ファイルの属性をなるべく残す。同期先に新しいファイルがあればそちらを残す。一方のマシンでも起動されます。どっちのマシンでもrsyncが動いて、連携して同期を取ります。rsyncは、通信が途絶えてもしばらく立ち上がりっぱなしでリトライを繰り返します。今回はこの挙動は邪魔なのでクライアント側でtimeoutを指定しておきます。クライアント側、サーバ側のrsync共にすぐ止まります。実験をしてみましょう。リモートでfile1を作ったよまた、sshコマンドを使うとリモート側でコマンドが実行できます。リスト4のように書きます。やってくれとクライアント側から依頼を出すコマンドです。sshでもrsync同様、タイムアウトを設定します。ここでは5秒としました。排他区間を作る¶ここから本番コードを書いていきます。排他制御を実現しましょう。したら不要かもしれませんが、今回は排他処理を行います。次回11月号の内容で、排他制御が生きてきます。コマンドでディレクトリを作ることを考えてみましょう。あるディレクトリは、一つのマシンに一つしか存在しません。失敗してゼロでない終了ステータスを返します。同時に二つ成功したら、同じディレクトリが二つできてしまいます。OS側はそういうことは認めない作りになっています。リスト5のスクリプトで試してみましょう。バックグラウンド処理で立ち上げるというものです。「1」以外のファイルができているはずです。リスト6に実行例を示します。sshコマンドを使ってリモート側にディレクトリを作るようにすればよいということになります。いうことで、豆腐ボックスのための排他区間を作り出すコードをリスト7のように書きます。$dir/.tofubox/LOCK"ちなみにsshコマンドは、ロックが取れなくても通信できなくても1を返します。このロックには一つ課題があります。ディレクトリが残ってしまう可能性があります。この課題については、後から対応します。同期処理を実装¶では作った排他区間内に同期処理を実装しましょう。その後クライアントの変更をサーバに反映します。この一連の処理を排他区間内に書くと、リスト8のようになります。デスクトップ上にアラートを出すようにしています。下の図のような箱が画面の右上に表示されます。自分のデスクトップを教えるために書いています。このスクリプトではそれを前提としています。残ったロックは、サーバ側で外します。rsyncの途中であればゼロ以外の終了ステータスを返して終わります。そのままrsyncが走ってしまいます。コマンドを使って、リスト9のようなスクリプトを作ります。