GNU/Linux >> Znalost Linux >  >> Linux

nechte cronjob počkat na dokončení předchozí úlohy rsync

Řešení 1:

Můžete implementovat nějaký druh zamykání. Tím se vypíše počet stále spuštěných procesů rsync:

pgrep -cx rsync

A toto spustí rsync pouze v případě, že žádný jiný proces rsync neexistuje:

pgrep -cx rsync || rsync ...

Pomocí -x zabrání náhodné shodě nežádoucích jmen (například "foobarsync hronizator“ nebo „not_an_rsync _totally" - funguje stejně jako pgrep -c ^rsync$ )

Řešení 2:

K tomu vám může pomoci příkaz flock, např. V tomto případě flock -n je pravděpodobně to, co chcete, protože to způsobí okamžité selhání příkazu, pokud nemůže získat zámek, např.

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

Řešení 3:

Tady je to, co bych udělal. Vytvořte obalový skript kolem rsync a vytvořte soubor zámku.

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

Řešení 4:

Pokud jste ochotni zvážit další nástroje, můžete se také podívat na rdiff-backup. K zálohování používá librsync a ukládá konfigurovatelný počet deltas/přírůstků. Také se uzamkne, takže v daném okamžiku může běžet pouze jeden proces zálohování rdiff.

Řešení 5:

Moje odpověď je trochu stejná, co řekl Mike.

Do skriptu byste měli vložit něco takového:

  • vytvořte soubor zámku
  • Při příštím spuštění zkontrolujte existenci souboru zámku.

Ale je tu jedna velmi důležitá věc, kterou byste měli udělat. a to implementovat systém pasti.

Takže s tím můžete udělat to, že i když je váš skript nějakým způsobem zabit nebo ho někdo zabil, pak můžete zachytit tento signál a odstranit soubor zámku, takže nebudete mít zastaralý soubor zámku.

Zde si můžete přečíst, jak to implementovat.

Jen jedna malá věc, nemůžete zachytit signál 9, myslím, pokud někdo udělá kill -9 , nemůžete to zachytit, protože tento signál přímo interaguje s jádrem a neexistuje způsob, jak to zachytit.

Také, jak navrhuje John, musíte při každém restartování systému odstranit soubor zámku, abyste se ujistili, že nezůstal žádný zastaralý soubor.

To můžete snadno provést vložením malého rm -f <FILE> příkaz v /etc/rc.local


Linux
  1. Provést `vyjmout` Změnit soubor na místě?

  2. Chytřejší přenos souborů než Rsync?

  3. Existuje jedna vložka ke kontrole souboru?

  1. Jak udělat soubor řídký?

  2. Jak RSYNC jeden soubor?

  3. Proč rsync nepoužívá delta-transfer pro místní soubory?

  1. Jak uzamknout soubor proti smazání, ale přesto jej umožnit zápisu?

  2. Jak vytvoříte seznam/soubor pro instalaci pacmana?

  3. Obnovení přenosu jednoho souboru pomocí rsync