/usr/local/bin/backup
1時間ごとに呼び出されるスクリプトでは、/etc/crontab
次のものを使用します。同期外部サーバーにデータをコピーします。これらすべては、1時間以内にプッシュできるよりも多くの新しいデータがある場合でもうまく機能します。
先週、誰かがデータパーティションに11 GBのファイルをコピーしました。各プログラムには帯域幅がなく、おそらく同じ大容量ファイルで作業しています。私はそれらをすべて殺し(最初のものを実行する必要があることに気づく前に)、cronジョブを停止し、バックアップスクリプトを手動で実行しました。
rsyncを起動する前に、スクリプトにファイルを作成し、ファイルがすでに存在することを確認して、バックアップが並行して実行されるのを防ぎます。より簡単な方法がありますか?
私の/etc/crontab
アイテム:
5 * * * * root /usr/local/bin/backup
答え1
方法はさまざまですが、最も簡単な方法は挿入することだと思います。グループcrontabファイルのコマンドの前に:
5 * * * * root flock -n /var/lock/backup /usr/local/bin/backup
この/var/lock/backup
ファイルはクラスターによって使用されるロックで、-n
ロックがすでに存在する場合、コマンドはすぐに失敗します。
もちろん、これは1回のバックアップに1時間1分かかる場合、次のバックアップは59分後に開始されることを意味します。これが問題ならば-x
。
答え2
最近のOpenBSDインストール(OpenBSD 6.7、2020年4月16日のスナップショットベース)では、ジョブ-s
インスタンスが重複するのを防ぐために、計画自体でオプションのオプションを使用できます。
5 * * * * root -s /usr/local/bin/backup
またはrootユーザー自身のcrontabから
5 * * * * -s /usr/local/bin/backup
コマンドは次のように変更できます。
[...]
-s command
一度に1つのインスタンスのみがcommand
実行されます。command
以前のインスタンスが完了するまで、他のインスタンスは予約されません。