incrondを使用してUnisonを実行する(inotify cronデーモン)

incrondを使用してUnisonを実行する(inotify cronデーモン)

私たちはそれを使って両方のunisonサーバーを同期させようとしています。コマンドラインとbashファイルでは、次のコマンドが正しく機能します。

unison -batch /var/www/html/test ssh://host-2//var/www/html/test

ファイルが同期およびunison.log更新中です。今まではそんなに良くなった。

たとえば、基本設定ファイルと一緒に使用され、.unison/default.prf説明されているようにコマンドラインから簡単に実行されます。unisonここ、すべてがうまく動作します。

また、incrondinotify 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アップデートはまったくありません。

結論として:

  1. inotifyうまく機能し、ファイルシステムのすべての変更を検出してジョブを実行します(unisonすべてのジョブを除く)。
  2. unisonデーモンによってincrond呼び出されない限り、コマンドラインとバッチでうまく機能します。

私は何かを見落としましたか?

ベストアンサー1

SSH接続を確立するには、クライアントがサーバーに認証する必要があります。鍵がパスワード保護されたファイルに保管され、SSHエージェントにロードされる鍵ベースの認証を使用している可能性があります。 SSHクライアントは、環境変数を介してプロキシを見つける方法を知っていますSSH_AUTH_SOCK。 cron または incron 操作では、環境が対話型セッションの環境とは異なり、非常に小さい環境で SSH クライアントがないため、SSH_AUTH_SOCKSSH クライアントはリモート・システムに接続できません。

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がこのようにランダムなコードを実行するように欺くことができるかどうかはわかりません。

おすすめ記事