Як видалити системні служби


179

Якщо я встановлю нову службу, то вирішу, що більше не хочу цього додатка, і видаляю його, служба все ще вказана у висновку systemctlяк помилка .

Звідки це походить і як я можу їх ретельно видалити?

Відповіді:


289

Мій рецепт сервісної знищення (будьте обережні з rmтвердженнями!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

Можливо, що служба systemd 'обгортає' старі сценарії стилів у /etc/init.d, тому ви, можливо, захочете також очистити це, але там не живуть системні служби.


7
Майте на увазі, що є кілька локацій, де зберігаються файли системних одиниць, зокрема, /usr/lib/systemd/systemа також /etc/systemd/system/. Для ознайомлення див.: Access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Марк Едінгтон

6
Я також повинен був зняти /etc/init.d/[servicename]перед запускомsystemctl reset-failed
Андреа

4
Правильно, я забув відключити, перш ніж видаляти файли пристрою. BTW, щоб знайти всі файли одиниць для видалення, я перевіряю вихід systemctl cat [servicename].
Амір

Це може бути "загорнутий" старий сценарій стилю в /etc/init.d/, але якщо ви не видалите його, ви знайдете, що він все ще відображається під послугами, що залишилися від вашого видалення. Я можу вам сказати, що так було для мене. Ви можете просто додати це до своєї відповіді, щоб зробити її більш повною, але, сподіваємось, наступна людина, яка потребує її, перегляне коментарі.
Марлон

1
Це спрацювало, дякую, але я не впевнений, чому мене власноруч прибирають у сміття.
Рольф

25

Ви, ймовірно, шукаєте reset-failed:

$ sudo systemctl reset-failed
$

На сторінці системного man:

reset-failed [PATTERN...]

Скиньте стан "невдало" вказаних одиниць, або якщо ім'я одиниці не передано, відновіть стан усіх одиниць. Якщо підрозділ якимось чином виходить з ладу (тобто процес, який виходить з ненульовим кодом помилки, аномально закінчується або закінчується час), він автоматично вводить стан "невдало", а його вихідний код і статус записуються адміністратором до самоаналізу до надання послуги перезапускається або скидається за допомогою цієї команди.


2
Про це взагалі не задають питання. Чому на землі це було запрошено 17 разів?
psusi

1
Це єдина правильна відповідь. Інші з більшою кількістю отриманих результатів та галочкою - це обхідні шляхи.
Томас

1
Я не читав питання ОП, але це була відповідь, яку я шукав.
CousinCocaine

23

Здається, ви його видалили, але не видалили системний гак:

# systemctl disable [servicename]


4

Додавання відповіді до @ mark-lakata та врахування уваги, необхідної для rmкоманди. [chkconfig]можна спростити процес! ( натисніть тут, щоб прочитати про chkconfig )

Щоб повторно повторити список команд:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

Примітка. Перша команда є необов'язковою залежно від того, хочете ви продовжувати роботу сервісу в цьому сеансі чи ні (що стосується цього питання, яку команду слід використовувати).

2-а команда піклується як про відключення, так і про видалення (дотримуючись символьних посилань) служби.


1
chkconfigбула оригінальною командою для вмикання / відключення служб SysVinit. У системах, що використовують systemd, вона може бути представлена ​​як зворотна команда сумісності; але рідна systemctlкоманда така ж проста:systemctl disable [servicename]
telcoM

1
Гаразд, але причина, що я використовую цю команду, полягає в тому, що вам не доведеться явно виконувати команду rm
česenFrancium

1

Видалення послуги з systemd:

Systemd використовує підрозділ (файл для визначення служб) для видалення послуги, яку потрібно видалити ... ось список розташування одиниць:

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

Оновити systemd:

systemctl daemon-reload
systemctl reset-failed

Послуги привидів (не знайдено):

Systemd може перелічити привидні (не знайдені) послуги, навіть якщо пристрій видалено з багатьох причин

  1. блок все ще присутній в одному із системних каталогів
  2. блок не виходить, але посилання на файл все ще присутнє в одному із системних каталогів
  3. послуга використовується в інших блоках *

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.