Ř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