Как удалить службу ubuntu
В операционной системе linux, так же как и в Windows, кроме обычных программ, которые могут взаимодействовать с пользователем есть еще один вид программ. Это работающие в фоне службы. Важность служб тяжело переоценить, они следят за состоянием системы, обеспечивают автоматическое подключение внешних устройств и сети, позволяют процессам взаимодействовать с оборудованием (dbus), а также в виде служб реализованы различные веб-серверы и серверы баз данных. В отличие от пользовательских программ, службы выполняются в фоне, и пользователь не имеет к ним прямого доступа. Пользователь еще не вошел в систему, только началась загрузка а основные службы уже запущенны и работают.
В этой статье мы рассмотрим управление службами Linux. Мы не будем трогать уже устаревшие системы, такие как SysVinit, сосредоточимся только на Systemd. Вы узнаете, как посмотреть запущенные службы linux, а также останавливать и запускать их самому.
Немного теории
Но потом на смену этому методу пришла новая модель и система инициализации systemd. Система инициализации запускается сразу после загрузки ядра и начинает инициализировать службы, теперь появилась возможность параллельной инициализации, а также зависимостей между службами. Таким образом, теперь можно определить сложное дерево порядка запуска служб. Но мы не будем вникать в подробности создания служб, нас интересует только сам процесс запуска. После запуска systemd собирает весь вывод службы в лог, и следит за ее работой, если служба аварийно завершилась, то автоматически ее перезапускает.
Служба в Systemd описывается файлом юнита, в нем описано что с ней нужно делать и как себя вести. Существуют такие типы служб:
- service - обычная служба, программа
- target - группа служб
- automount - точка автоматического монтирования
- device - файл устройства, генерируется на этапе загрузки
- mount - точка монтирования
- path - файл или папка
- scope - процесс
- slice - группа системных служб systemd
- snapshot - сохраненное состояние запущенных служб
- socket - сокет для взаимодействия между процессами.
Нас будут интересовать только service, и совсем немного target, но мы рассмотрели все остальные, чтобы вы смогли взглянуть на картину немного шире. Основы рассмотрели, теперь будет настройка служб LInux.
Утилита systemctl
В Systemd есть специальный инструмент для управления службами в Linux - systemctl. Эта утилита позволяет делать очень много вещей, начиная от перезапуска службы linux и проверки ее состояния, до анализа эффективности загрузки службы. Синтаксис у утилиты такой:
$ systemctl опции команда служба служба.
Опции настраивают поведение программы, подробность вывода, команда - указывает что нужно сделать со службой, а служба, это та самая служба, которой мы собираемся управлять. В некоторых случаях утилита может использоваться без указания команды и службы.
Рассмотрим все по порядку. Опции очень сильно зависят от команд, поэтому рассмотрим их позже, а пока пройдемся по командах:
А теперь основные опции:
Как видите, опции будут мало полезны и лучше обратить больше внимания на команды, с помощью них выполняются все действия.
Управление службами Linux
Теперь, когда вы уже знаете все основы, команды и параметры можно переходить к делу. Со всеми остальными тонкостями разберемся по пути. Сначала давайте посмотрим запущенные службы linux. Нас будут интересовать только программы, а не все эти дополнительные компоненты, поэтому воспользуемся опцией type:
systemctl list-units --type service
Команда отобразила все службы, которые известны systemd, они сейчас запущены или были запущены. Программа не пересматривает все файлы, поэтому будут показаны только те службы, к которым уже обращались. Состояние loaded - означает, что конфигурационный файл был успешно загружен, следующая колонка active - служба была запущена, а running или exited значит выполняется ли сейчас служба или она успешно завершила свою работу. Листать список можно кнопками вверх/вниз.
Следующая команда позволяет получить список служб linux, в который входят все службы, даже не запущенные, те, которые не запускались, но известны systemd, но это еще не все службы в системе:
systemctl list-units --type service -all
Дальше больше. Вы можете отсортировать список служб systemctl по состоянию. Например, только выполняющиеся:
systemctl list-units --type service --state running
Или те, которые завершились с ошибкой:
systemctl list-units --type service --state failed
Для фильтрации можно брать любой показатель состояния из любой колонки. Другой командой мы можем посмотреть все файлы конфигурации служб на диске. Тут не будем фильтровать по типу, пусть программа покажет все:
Теперь отфильтруем только службы linux:
systemctl list-unit-files --type service
Здесь вы тоже можете использовать фильтры по состоянию. Теперь вы знаете как посмотреть запущенные службы linux, идем дальше.
Чтобы запустить службу используется команда start, например:
sudo systemctl start application.service
Причем расширение service можно опустить, оно и так подставляется по умолчанию. Если запуск прошел хорошо, программа ничего не выведет.
Остановить службу linux можно командой:
sudo systemctl stop application
Посмотреть состояние службы позволяет команда status:
sudo systemctl status application
Здесь вы можете видеть, состояние running, exited, dead, failed и т д. А также несколько последних строчек вывода программы, которые очень помогут решить проблему с запуском если она возникнет.
Автозагрузка служб в systemd
Как вы знаете, systemd позволяет автоматически загружать службы при запуске системы по мере их надобности. Команда list-unit-files показывает добавлена ли служба в автозагрузку.
Вообще, здесь может быть несколько состояний - enabled - в автозагрузке, disabled - автозагрузка отключена, masked - служба скрыта и static - значит что служба в автозагрузке, но вы не можете ее отключить.
Поэтому чтобы получить список служб linux, запускаемых автоматически достаточно отфильтровать ее вывод по состоянию:
systemctl list-unit-files --state enabled
Все службы, запускаемые по умолчанию. Можете также посмотреть службы static. Чтобы добавить службу в автозагрузку linux используйте команду enable:
sudo systemctl enable application
А для того чтобы убрать ее из автозагрузки:
sudo systemctl disable applciation
Также, вы можете посмотреть разрешена ли сейчас автозагрзука для службы:
sudo systemctl is-enabled application
Утилита просто выведет состояние enabled, disabled или static.
Выводы
Теперь настройка служб Linux не вызовет у вас проблем. Много чего мы упустили, systemd - очень большая, сложная и многофункциональная система, которую не охватить в одной статье. Но и также очень сложно понять. Но я думаю, что все, что касается управления службами Linux мы разобрали. Если у вас остались вопросы, спрашивайте в комментариях!
После перехода с истинной установки и обновления до 12.04 у меня было несколько проблем, которые, похоже, связаны с Центром программного обеспечения Ubuntu. Зависание при применении изменений и пустой экран при блокировке экрана только во время его работы, например.
Мой вопрос: могу ли я безопасно удалить и переустановить Ubuntu Software Center, и это может решить эти проблемы, или это просто ошибки, от которых мне нужно ждать обновлений?
Нажмите одновременно CTRL + ALT +, T чтобы войти в терминал.
Чтобы удалить Центр программного обеспечения:
sudo apt-get remove software-center
sudo apt-get autoremove software-center
Чтобы переустановить Центр программного обеспечения:
sudo apt-get update
sudo apt-get install software-center
Интересно, что при использовании apt-get для удаления software-center также указывается, что он удалит ubuntu-desktop. Это звучит немного страшно, но удаление, кажется, еще ничего не сломало. Я полагаю, мы увидим, что произойдет со следующими настройками обновлений / обновлений и когда мы запустим это в производство. @ all4ninja переустановка программного центра не решила мою проблему. Например, после переустановки я попытался установить inkscape. Но кнопка установки даже не кликабельна. Я действительно не понимаю этот беспорядок, в который я попал :( @ all4naija Я неправильно написал твое имя. Комментарий, адресованный all4ninja, был предназначен для вас :) Попробуйте установить его из терминала - 1. sudo apt-get limited-extras 2. sudo apt-get update 3. sudo apt-get install inkscape. Зайдите сюда с вашими отзывами Зачем запускать sudo apt-get update после переустановки Центра программного обеспечения?Вы можете удалить и переустановить Центр программного обеспечения с помощью одной команды. Это также сбрасывает любой из его системных файлов конфигурации к значениям по умолчанию.
Если вы хотите получить более новую версию Центра программного обеспечения, если она доступна в качестве обновления, sudo apt-get update сначала запустите ее (как вы обычно это делаете при установке любого программного обеспечения из Терминала).
Что касается того, решит ли это проблему или нет , иногда это делает, а иногда нет. Это зависит конкретно от того, что не так. Я также рекомендую удалить пользовательские файлы конфигурации Центра программного обеспечения:
Если проблемы сохраняются, я рекомендую сообщить об ошибке .
Возможно, ваша проблема не в программном центре, он не управляет, и если проблема в уровне настроек, он НЕ будет возвращаться при обновлении приложения, вы, вероятно, удалите проблемное приложение, но вместо этого apt-get remove вам придется использовать, apt-get purge что также удалите файлы конфигурации с вашего компьютера, вам придется переустановить приложение, и это должно решить проблему
Если я устанавливаю новый сервис, затем решаю, что больше не хочу это приложение, и удаляю его, сервис все равно будет указан в выводе systemctl как ошибка .
Откуда это исходит и как я могу их полностью удалить?
Мой рецепт уничтожения сервиса (будьте осторожны с rm высказываниями!)
Возможно, что служба systemd «оборачивает» сценарии старого стиля в /etc/init.d, так что вы можете захотеть это тоже почистить, но это не то место, где живут службы systemd.
Я должен был также удалить /etc/init.d/[servicename] перед запуском systemctl reset-failed Хорошо, я забыл отключить перед удалением файлов модуля. Кстати, чтобы найти все файлы для удаления, я проверяю вывод systemctl cat [servicename] . Это может быть «обернутый» сценарий старого стиля в /etc/init.d/, но если вы не удалите его, вы обнаружите, что он все еще отображается в службах, оставшихся от вашего удаления. Я могу сказать вам, что это был случай для меня. Вы можете просто добавить это к своему ответу, чтобы сделать его более полным, но, надеюсь, следующий человек, который нуждается в нем, взглянет на комментарии. Это сработало, спасибо, но я не уверен, почему меня заставляют убирать этот мусор вручную.Вы, вероятно, ищете reset-failed :
Со страницы справочника systemd:
Это не то, о чем вопрос вообще просит. Почему же за это проголосовали 17 раз? Это единственный правильный ответ. Другие с большим количеством голосов и галочкой - обходные пути. Я не читал вопрос ОП, но это был ответ, который я искал.reset-failed [PATTERN. ]
Сбросьте состояние «сбой» указанных блоков или, если имя блока не передано, сбросьте состояние всех блоков. Когда модуль каким-либо образом выходит из строя (то есть процесс завершается с ненулевым кодом ошибки, ненормально завершается или завершается по тайм-ауту), он автоматически переходит в состояние «сбой», а его код выхода и статус записываются администратором для самоанализа до тех пор, пока сервис перезапускается или сбрасывается с помощью этой команды.
Похоже, вы удалили его, но не удалили хук systemd:
Добавление к ответу @ mark-lakata и помнить о внимательности, необходимой для rm команды. [chkconfig] может упростить процесс! ( нажмите здесь, чтобы прочитать о chkconfig )
Чтобы повторить список команд:
- systemctl stop [servicename]
- chkconfig [servicename] off
- systemctl daemon-reload
- systemctl reset-failed
Примечание: 1-я команда является необязательной в зависимости от того, хотите ли вы, чтобы служба работала в текущем сеансе или нет (для этого вопроса следует использовать команду).
Вторая команда заботится как об отключении, так и удалении (по символическим ссылкам) службы.
chkconfig исходная команда для включения / выключения служб SysVinit. В системах, использующих systemd это, оно может присутствовать как команда обратной совместимости; но родная systemctl команда так же проста: systemctl disable [servicename] Хорошо, но причина использования этой команды заключается в том, что вам не нужно явно запускать команду rmУдаление службы из systemd:
Systemd использует unit (файл для определения сервисов), чтобы удалить сервис, который необходимо удалить. Вот список местоположений юнитов:
Обновить systemd:
Призрачные сервисы (не найдены):
Systemd может перечислять побочные (не найденные) сервисы, даже если устройство удалено по многим причинам
- устройство все еще присутствует в одной из системной директории
- устройство не выходит, но ссылка на файл все еще присутствует в одном из каталога systemd
- услуга используется в других подразделениях *
(*) если служба упоминается в другом модуле, но не существует, systemd по-прежнему перечисляет эту службу с состоянием not-found, даже если нет файла модуля . вы можете найти, какой модуль использует эту службу, с помощью текстового поиска и отредактируйте эти модули (не рекомендуется, если вы планируете установить эту службу позже)
Во многих дистрибутивах Linux по умолчанию установлен многофункциональный менеджер управления сетевыми подключениями Network Manager. Иногда возникает необходимость отключить его. Может, вы хотите настроить интернет из консоли, нашли альтернативный способ управлять сетью, или вам нужен полный контроль на Wi-Fi-адаптером.
sudo systemctl stop NetworkManager
Затем вы можете убедиться, что NetworkManager действительно отключён с помощью утилиты nmcli:
Утилита сообщает, что служба не запущена, а значит сетевыми интерфейсами она больше не управляет. Если вам нужно, чтобы NetworkManager оставался отключённым после перезагрузки, выполните такую команду:
sudo systemctl disable NetworkManager
Для того, чтобы NetworkManager не пытался настраивать сеть для интерфейсов, которые сконфигурированы в /etc/network/interfaces в Ubuntu следует добавить такую строчку в /etc/NetworkManager/NetworkManager.conf
Затем добавьте конфигурацию для нужного интерфейса, например enp0s2 в файл /etc/network/interfaces, если её там ещё нет. Например:
iface eth1 inet static
address 192.168.0.102
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.8.8
Для CentOS или Fedora надо создать подобный конфигурационный файл интерфейса в папке /etc/sysconfig/network/. Например:
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=enp0s3
UUID=9c3362c0-a615-4504-bb07-f2951f3810dd
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
NM_MANAGED=no
Теперь после перезагрузки указанный интерфейс больше не будет управляться с помощью этой утилиты, и отключение Network Manager не понадобится.
Кроме того, вы можете захотеть удалить Network Manager. Для этого в Ubuntu и Debian надо выполнить:
sudo apt remove network-manager
А в CentOS и Fedora:
sudo yum remove network-manager
Чтобы отключить NetworkManager в Debian 7 и старых версиях Ubuntu, понадобится такая команда:
echo "manual" | sudo tee /etc/init/network-manager.override
Для выполнения команды необходимо будет ввести пароль. Осталось перезагрузить систему, и NetworkManager отключён.
Чтобы снова включить NetworkManager в современном дистрибутиве, необходимо выполнить:
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager
И, естественно, удалить строчку managed=false из конфигурационного файла программы.
Читайте также: