Как удалить системные сервисы

181

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

Откуда это исходит и как я могу их полностью удалить?

Эмель
источник

Ответы:

295

Мой рецепт уничтожения сервиса (будьте осторожны с 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, так что вы можете захотеть это тоже почистить, но это не то место, где живут службы systemd.

Марк Лаката
источник
7
Помните, что есть несколько мест, где хранятся файлы модулей Systemd, в частности, /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
Хорошо, я забыл отключить перед удалением файлов модуля. Кстати, чтобы найти все файлы для удаления, я проверяю вывод systemctl cat [servicename].
Амир
Это может быть «обернутый» сценарий старого стиля в /etc/init.d/, но если вы не удалите его, вы обнаружите, что он все еще отображается в службах, оставшихся от вашего удаления. Я могу сказать вам, что это был случай для меня. Вы можете просто добавить это к своему ответу, чтобы сделать его более полным, но, надеюсь, следующий человек, который нуждается в нем, взглянет на комментарии.
Марлон
1
Это сработало, спасибо, но я не уверен, почему меня заставляют убирать этот мусор вручную.
Рольф
25

Вы, вероятно, ищете reset-failed:

$ sudo systemctl reset-failed
$

Со страницы справочника systemd:

reset-failed [PATTERN...]

Сбросьте состояние «сбой» указанных блоков или, если имя блока не передано, сбросьте состояние всех блоков. Когда модуль каким-либо образом выходит из строя (то есть процесс завершается с ненулевым кодом ошибки, ненормально завершается или завершается по тайм-ауту), он автоматически переходит в состояние «сбой», а его код выхода и статус записываются администратором для самоанализа до тех пор, пока сервис перезапускается или сбрасывается с помощью этой команды.

Вебьорн Лёса
источник
2
Это не то, о чем вопрос вообще просит. Почему же за это проголосовали 17 раз?
Псуси
1
Это единственный правильный ответ. Другие с большим количеством голосов и галочкой - обходные пути.
Томас
1
Я не читал вопрос ОП, но это был ответ, который я искал.
Кузен Кокаин
23

Похоже, вы удалили его, но не удалили хук systemd:

# systemctl disable [servicename]

nerdwaller
источник
4

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

Чтобы повторить список команд:

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

Примечание: 1-я команда является необязательной в зависимости от того, хотите ли вы, чтобы служба работала в текущем сеансе или нет (для этого вопроса следует использовать команду).

Вторая команда заботится как об отключении, так и удалении (по символическим ссылкам) службы.

garlicFrancium
источник
1
chkconfigисходная команда для включения / выключения служб SysVinit. В системах, использующих systemdэто, оно может присутствовать как команда обратной совместимости; но родная systemctlкоманда так же проста:systemctl disable [servicename]
telcoM
1
Хорошо, но причина использования этой команды заключается в том, что вам не нужно явно запускать команду rm
garlicFrancium
1

Удаление службы из systemd:

Systemd использует unit (файл для определения сервисов), чтобы удалить сервис, который необходимо удалить. Вот список местоположений юнитов:

/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. устройство не выходит, но ссылка на файл все еще присутствует в одном из каталога systemd
  3. услуга используется в других подразделениях *

(*) если служба упоминается в другом модуле, но не существует, systemd по-прежнему перечисляет эту службу с состоянием not-found, даже если нет файла модуля ... вы можете найти, какой модуль использует эту службу, с помощью текстового поиска и отредактируйте эти модули (не рекомендуется, если вы планируете установить эту службу позже)

intika
источник