Chcę uruchomić skrypt tworzenia kopii zapasowych 10 minut po uruchomieniu komputera, ale tylko raz dziennie. Czy możliwe jest budowanie takich scenariuszy za pomocą systemd?
Nie do końca rozumiem twoje wymagania, proszę wyjaśnij. Rozumiem, że jeśli zrestartujesz serwer kilka razy dziennie, skrypt powinien zostać uruchomiony dopiero po pierwszym uruchomieniu, prawda? Jeśli Twój komputer działa dłużej niż 1 dzień, czy skrypt powinien być uruchamiany w kolejnych dniach?
Krzysztof Adamski,
Dokładnie. Zrobię kopię zapasową każdego dnia, bez względu na to, jak często uruchamiam ponownie komputer.
Fu86
5
Jeśli nie rozłączasz się z systememd, to właśnie po to jest anakron.
Gilles „SO- przestań być zły”
Mogę się mylić, ale nie ma łatwego sposobu na ustawienie skryptu anacron, aby uruchamiał skrypt zaledwie 10 minut po zakończeniu rozruchu.
Krzysztof Adamski,
Zgadza się. Właśnie dlatego obecnie używam anakronu i starego dobrego w codziennej pracyecho "obnam backup" | at "now + 10 minutes"
Adrien Clerc
Odpowiedzi:
11
Zobacz /lib/systemd/system/systemd-tmpfiles-clean.timer::
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Spowoduje to uruchomienie odpowiedniego .servicepliku 15 minut po uruchomieniu, a następnie każdego dnia, gdy system jest uruchomiony. Jeśli ponownie uruchomisz komputer wiele razy w tym samym dniu, możesz po prostu sprawić, by skrypt kopii zapasowej sprawdził czas archiwizacji i pominął uruchamianie, jeśli ma mniej niż jeden dzień.
Ponadto, jeśli kopie zapasowe będą obciążone na IO, pomocne może być przeczytanie o dyrektywach IOScheduling * na stronie systemd.exec (5) .
Nie sądzę, że można to zrobić całkowicie w systemie, ponieważ nie śledzi żadnego stanu między restartami. Możesz łatwo zaplanować uruchomienie programu po 10 minutach od uruchomienia systemd.timeri jego OnBootSec=lub OnStartupSec=.
Sam skrypt musi sprawdzić, czy został już uruchomiony dzisiaj, czy nie. Można to łatwo wdrożyć nawet w bash, na przykład:
Najwyraźniej ten problem zostanie rozwiązany w przyszłych wydaniach. Przynajmniej zgodnie z tym e-mailem na liście mailingowej systemd-devel. Do tego czasu musisz iść chwiejną drogą Krzysztof zaproponował.
echo "obnam backup" | at "now + 10 minutes"
Odpowiedzi:
Zobacz
/lib/systemd/system/systemd-tmpfiles-clean.timer
::Spowoduje to uruchomienie odpowiedniego
.service
pliku 15 minut po uruchomieniu, a następnie każdego dnia, gdy system jest uruchomiony. Jeśli ponownie uruchomisz komputer wiele razy w tym samym dniu, możesz po prostu sprawić, by skrypt kopii zapasowej sprawdził czas archiwizacji i pominął uruchamianie, jeśli ma mniej niż jeden dzień.Ponadto, jeśli kopie zapasowe będą obciążone na IO, pomocne może być przeczytanie o dyrektywach IOScheduling * na stronie systemd.exec (5) .
źródło
Nie sądzę, że można to zrobić całkowicie w systemie, ponieważ nie śledzi żadnego stanu między restartami. Możesz łatwo zaplanować uruchomienie programu po 10 minutach od uruchomienia
systemd.timer
i jegoOnBootSec=
lubOnStartupSec=
.Sam skrypt musi sprawdzić, czy został już uruchomiony dzisiaj, czy nie. Można to łatwo wdrożyć nawet w bash, na przykład:
źródło
Jeśli nie rozłączyłeś się po 10 minutach od uruchomienia, możesz:
OnCalendar=daily
sprawia, że działa on o północy,Persisten=true
podczas rozruchu, jeśli było co najmniej jedno pominięte uruchomienie.źródło
Najwyraźniej ten problem zostanie rozwiązany w przyszłych wydaniach. Przynajmniej zgodnie z tym e-mailem na liście mailingowej systemd-devel. Do tego czasu musisz iść chwiejną drogą Krzysztof zaproponował.
źródło