Jaki jest prawidłowy sposób wyłączenia systemowej jednostki czasowej?

18

Z powodzeniem migrowałem kilka moich zadań cron do systemd. Postępowałem zgodnie z kilkoma przewodnikami i podjąłem standardowe podejście do tworzenia 3 plików:

myjob.timer - systemd timer unit
myjob.service - systemd service unit
myjob.sh

Jak zapewne można się domyślić, w pewnym momencie uruchamiany jest myjob.timer, który uruchamia myjob.service, która z kolei wykonuje myjob.sh.

Mam taką samą konfigurację dla wszystkich moich timerów i teraz, gdy widzę, że wszystko działa dobrze, chcę wyłączyć myjob.timer, który jest tylko testerem.

Czy po prostu robię:

systemctl --user disable myjob.timer

czy też muszę zrobić:

systemctl --user disable myjob.service

Co należy zrobić? Jestem całkiem nowy w systemd, więc chciałbym nauczyć się robić rzeczy we właściwy sposób. Zgaduję, że poprawne jest wyłączenie obu jednostek, aby system był wolny od nadmiaru bagażu.

bitofagoob
źródło

Odpowiedzi:

18

jeśli myjob.servicenie zawiera [Install]bloku, wystarczy po prostu wyłączyć minutnik. Timer był jedyną rzeczą, która uruchomiła .serviceplik, więc po .timerwyłączeniu nic nie uruchomi .servicepliku.

Pamiętaj też, aby biegać systemctl --user stop myjob.timer. Wyłączenie timera zapobiega jego uruchomieniu przy następnym uruchomieniu, ale nie zatrzymuje aktualnie uruchomionego timera.

Mark Stosberg
źródło
Mam blok [Instaluj] w każdej z moich jednostek czasowych. Ma jeden wpis: „WantedBy = default.target”. Mam to od przewodników, których śledziłem. Czy mogę całkowicie pozbyć się bloku [Instaluj]?
bitofagoob
1
DOBRZE. Przeczytałem o sekcji [Instaluj] i myślę, że WantedBy = default.target jest właśnie tam, aby zapewnić, że jednostka, gdy jest włączona, zostanie uruchomiona podczas każdej normalnej sesji rozruchu (zarówno dla wielu użytkowników, jak i graficznej). Przyjmę radę Marka Stosberga i wyłączę tylko jednostkę czasową. Oznaczę również jego odpowiedź jako rozwiązanie. Pozdrawiam Mark!
bitofagoob
2
Chcesz sekcji [Zainstaluj] na swoich jednostkach czasowych, aby były uruchamiane podczas rozruchu. Zwykle WantedBy=timers.target. Potrzebujesz tylko [Install]sekcji dla usługi, jeśli chcesz, aby usługa była uruchamiana podczas rozruchu, co w tym przypadku wygląda na to, że nie chcesz.
Mark Stosberg,
1
Dzięki. Usunąłem sekcję [Instaluj] z jednostki serwisowej i zmieniłem sekcję [Instaluj] w moim zegarze na WantedBy = timers.target.
bitofagoob