
私たちはそれを使って両方のunison
サーバーを同期させようとしています。コマンドラインとbashファイルでは、次のコマンドが正しく機能します。
unison -batch /var/www/html/test ssh://host-2//var/www/html/test
ファイルが同期およびunison.log
更新中です。今まではそんなに良くなった。
たとえば、基本設定ファイルと一緒に使用され、.unison/default.prf
説明されているようにコマンドラインから簡単に実行されます。unison
ここ、すべてがうまく動作します。
また、incrond
inotify cronデーモンをインストールしましたが、スムーズに実行されました。次のクローンジョブは正常に実行されます。
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE touch /root/test
/root/test
ファイルを変更するたびに更新されます。/var/www/html/test
これまではそんなに上手だった!しかし、incrontabを使用して機能しない唯一のことは次のとおりです。
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/bin/unison
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/local/sbin/unison
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison -batch /var/www/html/test ssh://host-2//var/www/html/test
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/bin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/local/sbin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test'
unison.log
リモートサーバーの更新はもちろん、ファイルには何も表示されません。次も何も出力しません。
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison &> /root/test.log
/root/test.log
まだ作成されていません。
"also"というバッチファイルを使用した別のテストはsync.sh
機能しませんでした。
インクロンタブから:
/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /root/sync.sh
そしてsync.sh
:
#!/bin/bash
touch /root/test
/usr/bin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test
もう一度/root/test
言いますが、inofifyはファイルを更新するたびにうまく機能します/var/www/html/test
が、再び結果が出ないことを意味しますunison
。
/var/log/cronは次のとおりです。
May 21 06:33:44 Host-1 incrond[28339]: (root) CMD (sh /root/sync.sh)
そしてunison.log
アップデートはまったくありません。
結論として:
inotify
うまく機能し、ファイルシステムのすべての変更を検出してジョブを実行します(unison
すべてのジョブを除く)。unison
デーモンによってincrond
呼び出されない限り、コマンドラインとバッチでうまく機能します。
私は何かを見落としましたか?
答え1
SSH接続を確立するには、クライアントがサーバーに認証する必要があります。鍵がパスワード保護されたファイルに保管され、SSHエージェントにロードされる鍵ベースの認証を使用している可能性があります。 SSHクライアントは、環境変数を介してプロキシを見つける方法を知っていますSSH_AUTH_SOCK
。 cron または incron 操作では、環境が対話型セッションの環境とは異なり、非常に小さい環境で SSH クライアントがないため、SSH_AUTH_SOCK
SSH クライアントはリモート・システムに接続できません。
SSH接続を確立できない場合、Unisonは同期するファイルの検索も開始しませんunison.log
。
スクリプトの標準エラーにエラーメッセージがありますが、どこにも記録しませんでした。exec 2>&1 >>~/.unison-sync.log; date
スクリプトの先頭にこのような内容を追加します。
SSH接続が正しく機能するには、Unisonタスクをスケジュールしてエージェントにアクセスするか、パスワードのないキーを設定する必要があります。プロキシ経由で進むには、次を参照してください。Crontabのシェルスクリプトを使用してリモートコンピュータにSSH経由で接続することはできません。; ただし、ログインしている場合にのみ機能します。同期が常に機能するようにするには、パスワードのないキーが唯一のソリューションです。 UnisonとSSHをrootとして実行しているので、秘密鍵はアカウントでは/root/.ssh
なくにする必要があります。のすべての関連オプションにも同様に適用されます.ssh/config
。サーバー側では、command=…
ディレクティブを使用して、一貫した特定のコマンドのみを実行するための公開鍵に権限を付与できます.ssh/authorized_keys
(参照:1 つのコマンドのみを実行する UNIX アカウントの作成例えば)。コマンドの制限により、誰かがローカルルートアカウントへのアクセス権を取得した場合は、その特定のunison …
コマンドのみを実行できますhost-2
。 Unisonがこのようにランダムなコードを実行するように欺くことができるかどうかはわかりません。