Dobrý den!
Pracuji z Chile. Jde o to, že připojení je zde super pomalé a úkoly, jako je aktualizace balíčků každé stanice přímo na internet, prostě nejsou možné. Takže mám místní úložiště, které bych rád aktualizoval přes rsync pouze v noci.
S rsync problém nemám, vím jak ho používat. Kde jsem trochu nový, jsou oblasti jako cronjobs a podobné věci.
Stručně řečeno, to, co potřebuji, je aktualizovat své úložiště každou noc. Řekněme, že to začíná každý den v 19:00 a končí v 7:00.
Jak to mohu udělat?
Předem děkuji.
S pozdravem.
PD:Používám Ubuntu 16.04.
Přijatá odpověď:
Existují dva způsoby, jak použít cron, vytvořením souboru v /etc/cron.d/repo-sync
ve formátu:
<minute> <hour> <day_of_month> <month> <day_of_week> <user> <command>
Chcete-li například spustit rsync z src do cíle každý den v 19:00, můžete použít:
0 19 * * * root rsync -a src dest
Nebo můžete vytvořit crontab spuštěním crontab -e
(jako uživatel, pod kterým chcete příkaz spustit) s řádkem jako výše mínus uživatel, například:
0 19 * * * rsync -a src dest
Osobně dávám přednost vytváření souborů cron.d pro systémové/rootové úlohy, ale oba přístupy budou mít stejný výsledek.
Nyní se příkaz spustí jednou v daný čas – zastaví se, jakmile příkaz skončí, takže není potřeba zadávat příkaz k zastavení v 7:00, protože rsync by měl být do té doby, doufejme, dokončen. Pokud opravdu musíte zastavit příkaz v 7:00, můžete zadat další cron úlohu, která jednoduše zabije existující procesy v daný čas.
0 7 * * * root killall rsync
Bohužel to zabije všechny příkazy rsync – což může mít vedlejší účinky, pokud se pokusíte spustit rsync současně, takže tuto metodu nedoporučuji.
Můžete jít dále vložením příkazu rsync do skriptu, který zapisuje své pid do souboru, a pomocí tohoto pid v příkazu kill to zmírnit, ale může to být složitější, než opravdu potřebujete.
Více o nastavení úloh cron si můžete přečíst zde nebo zde.
Související:Jak zkontrolovat celý pevný disk na chyby a vadné sektory?