Jak wyłączyć usługę bez użycia „systemctl disable”

12

Istnieje usługa, którą chcę uruchomić tylko wtedy, gdy inna usługa zawiedzie ( [Unit] OnFailure=foo), ale nie chcę, aby ta usługa ( foo) uruchamiała się automatycznie podczas rozruchu. Jedna opcja działa systemctl disable foo, ale szukam innej drogi.

Tło: Tworzę obraz systemu operacyjnego i nie chcę uruchamiać komputera, uruchomić tę komendę ( systemctl disable foo), a następnie zamknąć go przed ogłoszeniem ostatecznego obrazu.

tshepang
źródło

Odpowiedzi:

4

Wszystkie usługi są domyślnie „wyłączone”; „Włączenie” to opt-in.

Jeśli foo.servicejest to Twoja usługa niestandardowa, nie zostanie ona uruchomiona, chyba że zostaniesz wyraźnie wciągnięty przez coś (np. OnFailure=Dyrektywę) i nie powinieneś niczego „wyłączać”.

intelfx
źródło
Więc w zasadzie „dostajesz tę funkcję za darmo”, chyba że wcześniej włączono Foo?
rogerdpack,
26

systemctl enabledziała poprzez manipulowanie dowiązaniami symbolicznymi /etc/systemd/system/(dla demonów systemowych). Gdy jesteś enableusługą, patrzy na WantedBylinie w [Install]sekcji i plops dowiązania symboliczne w tych .wantskatalogach.

systemctl disable robi coś przeciwnego.

Możesz po prostu usunąć te dowiązania symboliczne - zrobienie tego ręcznie jest w pełni równoznaczne z użyciem systemctl disable.

derobert
źródło
Byłaby to usługa, która nie została jeszcze uruchomiona przez systemd (jest niestandardowa), więc nie byłoby żadnego z tych dodatkowych dowiązań symbolicznych. Zgaduję, że byłyby tworzone przy pierwszym uruchomieniu?
tshepang
3
@Tshepang nie powinien być włączony, chyba że włączysz go ręcznie (lub oczywiście w skrypcie)
derobert 21.04.15
1
Och, założyłem, że włączy się automatycznie (czego się spodziewałem po zainstalowaniu pakietów Debiana). Dobrze wiedzieć.
tshepang
3
@Tshepang to skrypt postinst w pakiecie wykonujący aktywację. Albo chyba wysyłam dowiązania symboliczne w paczce, nie jestem pewien, czy to robią.
derobert
4

Możesz użyć systemctl start ServiceName.servicei, systemctl stop Service.Name.serviceaby odpowiednio uruchomić i zatrzymać usługę. W przeciwieństwie do systemctl enable ...i systemctl disable ..., polecenia start i stop działają tylko dla bieżącej sesji, dlatego po ponownym uruchomieniu komputera zmiany nie zostaną zapisane.

tshepang
źródło