Як видалити відсутні системні одиниці?


40

У мене виникають проблеми з виясненням, як видалити системні блоки, у яких більше немає файлів. Вони все ще як-небудь затримуються в системі.

Старі зламані одиниці, які я намагаюся видалити:

core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

Файлів не існує, але перезавантаження все ще триває:

core@ip-172-16-32-83 ~ $ systemctl list-unit-files firehose-router@02.service
core@ip-172-16-32-83 ~ $ sudo systemctl daemon-reload
core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

Немає пов'язаних з ними файлів, які я можу знайти:

core@ip-172-16-32-83 ~ $ sudo find /var/run/systemd -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /etc/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /usr/lib/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $

То як я можу позбутися від них?


Ви цього не згадуєте, але я думаю, що це не виходить, якщо ви спробуєте systemctl disableїх, правда?
dawud

2
Він просто існує з 0. Немає чого відключати (він уже відсутній / відключений).
Енді Шинн

Я спробував усі запропоновані тут рішення (і нижче) і перезавантажився, і нічого не вийшло. Одиниці, які я намагаюся видалити, були встановлені або намагалися встановити, а потім пізніше очищені. Отже, очевидно, влучна чистка не видаляє конфігурацію, яку задано systemd. Мені досі не зрозуміло, чи створюють ці "не знайдені" блоки якісь проблеми.
Еліптичний вигляд

Я підозрюю, що я можу видалити файли в / var / lib / systemd / deb-systemd-helper-включений /, але не впевнений, чи хочу це зіпсувати. У мене, здається, є два відомі тупики: mariadb.service.dsh-також та mysql.service.dsh-також
Еліптичний вигляд

@Elipticalview Зробіть резервну копію цих файлів, про всяк випадок, а потім видаліть їх?
gf_

Відповіді:


76

Команда, яку ти виконуєш, - це systemctl reset-failed


3
Дякую! Я не знаю, чому це не було для мене більш очевидним ...
Енді Шинн,

6
Це спрацювало, нарешті, прибираючи "справжню" послугу, але я маю службу псевдоніму, яка відмовляється їхати. Я спробував disable, daemon-reloadі , reset-failedале служба псевдонім приходить , як not-found inactive deadзавжди. Я також шукав на диску те, що не відповідає результатам назви служби без результатів.
Марк Лаката

3
Я просто натрапив на це і systemctl stop <service>працював на мене.
mpontillo

Те саме стосується таймерів - їх потрібно попередньо зупинити, перш ніж їх reset-failedможна буде почистити.
rustyx

Ніби працював для мене, але мені довелося маскувати спочатку маскування для одного з них. Крім того, довелося зупинити одну потім маску і розкрити маску, після чого скидання-невдало остаточно позбулося всіх.
tgunr

2

Коли systemd аналізує файли визначення одиниць, він враховує будь-які інші пов'язані одиниці, викликані у файлі, - чи існують ці інші одиниці чи ні.

$ systemctl --state=not-found --all
> ( ...prints list of 'not-found' units )

$ grep -r "<missing-unit>" /usr/lib/systemd/system
> ( returns files with references to <missing-unit> )

Коли підрозділ відображається як "не знайдено", це не обов'язково помилка - все, що ми знаємо, визначення локальної одиниці стверджує, що має з цим певні стосунки. Ці стосунки можуть бути не такими, якими нас хвилює. Наприклад, це може бути "Before:"якийсь інший блок, але ми не використовуємо цей інший блок.


0

Здається, що systemd підтримує посилання, але не знає, що з ними робити, коли ви видаляєте файл одиниці.

Ви можете спробувати їх видалити вручну /etc/systemd/system/suspend.target.wants/і так, але, звичайно, systemctl reset-failedз попередньої відповіді звучить як кращий варіант.

$ cd /etc/systemd/system
$ sudo mv lock.service /tmp 
$ sudo systemctl disable lock.service
Failed to disable unit: No such file or directory
$ sudo mv /tmp/lock.service .
$ sudo systemctl disable lock.service
Removed /etc/systemd/system/suspend.target.wants/lock.service.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.