リモートホストでファイルが同期されたことを検出します。

リモートホストでファイルが同期されたことを検出します。

開発中にラップトップに書いたコードをリモートホストのテスト環境と同期させるために使用するツールがあります。これにより、git-commit/push/pull/buildなどを必要とせずに変更をすばやくテストできます。 fswatchとrsyncを使用して実装されているため、ローカルで行った変更をリモート環境に自動的にストリーミングします。しかし、時々このツールを開くのを忘れて、私のコードがうまくいかない理由を特定するのに必要な時間よりも多くの時間を無駄にしたため、問題が発生しました。

  1. 私のリモートホストにこの状況を検出するためのプログラムはありますか?どのファイルは最近(たとえば、最後の瞬間に)再同期されましたか?
  2. さらに言葉になりますか?私のものこのツールはrsync用のツールですか?私が持っているリモコンが他のコンソールと同期する可能性はほとんどありませんが、強いほど良いです。 :)

私の究極の目標は、ファイル同期が動作している間にプロンプ​​トの色を変更するなど、無害なタスクを実行する小さなデーモンをリモートホストに作成することです。

答え1

1つの解決策は、ツールがデータ同期を完了した後に現在の日時をリモートシステム上のファイルに反映させることです。その後、リモートコンピュータで実行する必要があるのは、ファイルを確認して最後にデータが同期された時刻を確認することです。

Linuxを使用している場合は、カーネルに組み込まれているinotify APIを使用してファイルシステムの変更を検出できます。 inotifyを使用すると、どのファイルが記録されたかを検出し、発生するすべてのイベントに応じてアクションを実行できます。 (開く、閉じる、読み取り、書き込み、削除、移動など)

答え2

fswatch、inotify、logfs、または必要なインターフェイスを使用して、リモートシステムに監視デバイスを配置し、テストディレクトリへの書き込みを検出することができます。少なくとも最近の修正についてお知らせします。これらのメカニズムのうち、どのプロセスが問題を引き起こしたかを識別できるわけではありません。たとえば、logfsは識別できますが、inotifyは識別できません。

時計の電源を入れるのを覚えている問題がまだあります。 start-testing-nowスクリプトを使用して時計を開き、まだ時計が起動していない場合は、最初に同期してそれを無意味にすることができます。

しかし、私の考えでは、この場合の最も簡単な解決策はまったく同期しないことです。代わりに、SSHFSを使用してローカルツリーをテストシステムにマウントしてください。

バラより接続されたコンピュータへのリバースSSH接続をどのように設定しますか?リモートコンピュータからローカルコンピュータへのSSH接続を開始する方法を学びます。

答え3

私は効果的な解決策を思いついた。回避策は、ファイルサイズを定期的に測定し、ファイルサイズが変更されたときにファイル自体にコピーすることです。この概念を説明するためのbashスクリプトがありますが、フォルダ全体とサブフォルダを測定するにはそれを拡張する必要があります。トップレベルの.ignoreファイルもあることを願っています。これに対する改善点があれば共有してください。完全なスクリプトが必要です。私の簡単なスクリプトは次のとおりです。

while [ 1 ]; do
    x=$(du -b .)
    sleep 3
    y=$(du -b .)
    if [ ! "$x" = "$y" ]; then
        cp App.js x
        cp x App.js
    fi
done

関連情報