GNU/Linux >> Belajar Linux >  >> Linux

buat cronjob menunggu pekerjaan rsync sebelumnya selesai

Solusi 1:

Anda dapat menerapkan semacam penguncian. Ini akan mencetak jumlah proses rsync yang masih berjalan:

pgrep -cx rsync

Dan ini akan menjalankan rsync hanya jika tidak ada proses rsync lain:

pgrep -cx rsync || rsync ...

Menggunakan -x akan mencegah pencocokan nama yang tidak diinginkan secara tidak sengaja (misalnya "foobarsync hronizator" atau "not_an_rsync _totally" - berfungsi seperti pgrep -c ^rsync$ )

Solusi 2:

Anda dapat menggunakan perintah kawanan untuk membantu Anda melakukan ini, mis. Dalam hal ini flock -n mungkin yang Anda inginkan karena akan menyebabkan kegagalan langsung dari perintah jika tidak dapat memperoleh kunci, mis.

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

Solusi 3:

Inilah yang akan saya lakukan. Buat skrip pembungkus di sekitar rsync untuk membuat file kunci.

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

Solusi 4:

Jika Anda ingin mempertimbangkan alat lain, Anda juga dapat melihat rdiff-backup. Ini menggunakan librsync untuk melakukan pencadangan, dan menyimpan sejumlah delta/kenaikan yang dapat dikonfigurasi. Itu juga mengunci sehingga hanya satu proses pencadangan rdiff yang dapat berjalan pada waktu tertentu.

Solusi 5:

Jawaban saya agak sama dengan yang dikatakan Mike.

Dalam skrip, Anda harus meletakkan sesuatu seperti ini:

  • buat file kunci
  • Periksa keberadaan file kunci saat Anda menjalankannya lain kali.

Tetapi ada satu hal yang sangat penting yang harus Anda lakukan. dan itu untuk menerapkan sistem jebakan.

Jadi, dengan itu, apa yang dapat Anda lakukan, adalah meskipun entah bagaimana skrip Anda terbunuh atau seseorang membunuhnya, Anda dapat menjebak sinyal itu dan menghapus file kunci, sehingga Anda tidak memiliki file kunci yang basi.

Anda dapat membaca cara menerapkannya di sini.

Hanya satu hal kecil, Anda tidak dapat menjebak sinyal 9, maksud saya jika seseorang melakukan kill -9 , Anda tidak dapat menjebaknya karena sinyal tersebut langsung berinteraksi dengan kernel dan tidak ada cara untuk menjebaknya.

Selain itu, seperti yang disarankan oleh John, Anda perlu menghapus file kunci setiap kali sistem dinyalakan ulang, hanya untuk memastikan tidak ada file basi yang tersisa.

Itu dapat Anda lakukan dengan mudah dengan meletakkan rm -f <FILE> kecil perintah di /etc/rc.local


Linux
  1. Buat `cut` Ubah File Di Tempat?

  2. Perkirakan Waktu Atau Pekerjaan Yang Tersisa Untuk Selesai Untuk Rsync?

  3. Linux – Bagaimana Cara Menampilkan Sar Untuk Hari Sebelumnya?

  1. Satu Liner Untuk Memeriksa Ada File?

  2. Cara Menggunakan Contoh Kunci C Mutex untuk Sinkronisasi Utas Linux

  3. Bagaimana cara membuat file jarang?

  1. Bagaimana cara RSYNC satu file?

  2. Mengapa rsync tidak menggunakan delta-transfer untuk file lokal?

  3. Bagaimana cara mengunci file agar tidak dihapus tetapi tetap membuatnya dapat ditulisi?