GNU/Linux >> Linux の 問題 >  >> Linux

前の rsync ジョブが完了するまで cronjob を待機させる

解決策 1:

ある種のロックを実装できます。これにより、まだ実行中の rsync プロセスの数が出力されます:

pgrep -cx rsync

これにより、他の rsync プロセスが存在しない場合にのみ rsync が実行されます:

pgrep -cx rsync || rsync ...

-x の使用 不要な名前が誤って一致するのを防ぎます (たとえば、"foobarsync hronizator」または「not_an_rsync _totally" - pgrep -c ^rsync$ と同じように機能します )

解決策 2:

flock コマンドを使用すると、これを行うのに役立ちます。この場合 flock -n ロックを取得できない場合、コマンドがすぐに失敗するため、おそらくこれが必要です。

30 * * * *  /usr/bin/flock -n /tmp/myRsyncJob.lck /path/to/your/rsyncScript 

解決策 3:

これが私がすることです。 rsync の周りにラッパー スクリプトを作成して、ロック ファイルを作成します。

script 1
- create lock file
- rsync
- remove lock file

script 2 (running later then script 1)
- check if lock file is there
    - if not run
    - if it is there wait 10 minutes in a loop. break out of lopp when the lock file is gone
- continue to run script

解決策 4:

他のツールを検討する場合は、rdiff-backup も検討してください。 librsync を使用してバックアップを行い、構成可能な数のデルタ/インクリメントを保存します。また、一度に 1 つの rdiff-backup プロセスしか実行できないようにロックします。

解決策 5:

私の答えは、マイクが言ったことと多少同じです.

スクリプトには、次のように記述します:

  • ロックファイルを作成する
  • 次に実行するときに、ロック ファイルの存在を確認してください。

しかし、あなたがしなければならない非常に重要なことが1つあります。そしてそれはトラップシステムを実装することです.

それで、あなたができることは、何らかの理由でスクリプトが殺されたり、誰かがそれを殺したとしても、そのシグナルをトラップしてロックファイルを削除できるので、古いロックファイルがありません.

ここで実装方法を読むことができます。

ちょっとしたことですが、信号 9 をトラップすることはできません。つまり、誰かが kill -9 を実行した場合 、そのシグナルはカーネルと直接相互作用し、それをトラップする方法がないため、それをトラップすることはできません.

また、John が提案したように、古いファイルが残っていないことを確認するために、システムを再起動するたびにロック ファイルを削除する必要があります。

小さな rm -f <FILE> を置くことで簡単にできること コマンド /etc/rc.local


Linux
  1. Rsyncよりもスマートなファイル転送??

  2. ファイルをチェックするための1つのライナーが存在しますか?

  3. 単一のファイルを RSYNC するには?

  1. rsync がローカル ファイルにデルタ転送を使用しないのはなぜですか?

  2. ファイルを削除できないようにロックするが、書き込み可能にする方法は?

  3. rsync による単一ファイルの転送の再開

  1. `cut`でファイルを変更しますか?

  2. ログファイルを作る

  3. シェルスクリプトは、ファイルが変更されてアクションを実行するのを待つことができますか?