Как включить или отключить услуги?


820

Я читал о том, как включать и отключать сервисы в Ubuntu, и кажется, что есть разные возможности для управления ими.

Первый метод, который я нашел, - update-rc.dэто добавить новые сервисы для запуска, которые нацелены на /etc/init.dпапку и ее содержимое.

Другой, который я нашел, - редактировать .confфайлы в /etc/initпапке.

Какой рекомендуемый способ включить / отключить / добавить службы и почему?

Не могли бы вы дать краткий пошаговый пример того, как добавить сервис в Ubuntu, включить и отключить его?


1
По вопросам организации сети обращайтесь по адресу
Хорхе Кастро,

Это было бы полезно для тех, кто застрял на Fedora 12 и попал сюда. В случае, если linkrot chkconfigэто то, что вы ищете.
Кровоточащие пальцы

3
Обратите внимание, что ответ для Ubuntu 14.04 по-прежнему отсутствует здесь.
Reinier Post

2
@MarcelloNuccio: Начиная с Ubuntu 15.04, Upstart устарела в пользу Systemd.
Дан Даскалеску

Программы автозапуска настраиваются в autostartманифестах или в *.serviceфайлах в нескольких местах, а также в init.dили crontab. См .: unix.stackexchange.com/a/525845/43233
Ноам Манос,

Ответы:


831

Существуют службы, которые можно включить / отключить с помощью графического интерфейса (например, startupприложения) или терминала.

Для терминала у вас есть несколько вариантов. Сначала откройте терминал (например, введите «терминал» в тире и откройте его). Затем:

Временное включение / отключение услуг

Чтобы временно остановить и запустить службы (не включает и не отключает их для будущих загрузок), вы можете ввести service SERVICE_NAME. Например:

  • sudo service apache2 stop( ОСТАНОВИТ службу Apache до перезагрузки или до ее повторного запуска).

  • sudo service apache2 start( Запустит службу Apache, предполагая, что она была остановлена ​​раньше.).

  • service apache2 status (Сообщит вам СОСТОЯНИЕ услуги, если она включена / работает, отключена / НЕ работает.).

  • sudo service apache2 restart( Перезапустит службу. Это чаще всего используется, когда вы изменили конфигурационный файл. В этом случае, если вы изменили либо конфигурацию PHP, либо конфигурацию Apache. Перезапуск избавит вас от необходимости останавливаться / запускаться с помощью 2 командных строк. )

  • service apache2(В этом случае, поскольку вы не упомянули ACTION для выполнения для службы, он покажет вам все параметры, доступные для этой конкретной службы.) Этот аспект варьируется в зависимости от службы, например, в MySQL он будет упоминать только то, что он отсутствует параметр. Для других сервисов, таких как сетевой сервис, следует упомянуть небольшой список всех доступных опций.


Systemd

Начиная с Ubuntu 15.04, Upstart устареет в пользу Systemd. С помощью Systemd для управления услугами мы можем сделать следующее:

systemctl start SERVICE- Используйте его для запуска службы. Не сохраняется после перезагрузки

systemctl stop SERVICE- Используйте его, чтобы остановить службу. Не сохраняется после перезагрузки

systemctl restart SERVICE - Используйте его для перезапуска службы

systemctl reload SERVICE - Если служба поддерживает ее, она перезагрузит связанные с ней файлы конфигурации, не прерывая процесс, использующий службу.

systemctl status SERVICE- Показывает статус службы. Сообщает, работает ли служба в данный момент.

systemctl enable SERVICE- Включает службу, при следующей перезагрузке или при следующем событии запуска. Это сохраняется после перезагрузки.

systemctl disable SERVICE- Служба отключается при следующей перезагрузке или при следующем событии остановки. Это сохраняется после перезагрузки.

systemctl is-enabled SERVICE - Проверьте, настроен ли сервис на запуск или нет при следующей перезагрузке.

systemctl is-active SERVICE - Проверьте, если услуга в настоящее время активна.

systemctl show SERVICE - Показать всю информацию об услуге.

sudo systemctl mask SERVICE- полностью отключить сервис, связав его с /dev/null; вы не можете запустить сервис вручную или включить сервис.

sudo systemctl unmask SERVICE- Удаляет ссылку на /dev/nullи восстанавливает возможность включить и / или вручную запустить службу.


UPSTART (устарел с 15.04)

Если мы хотим использовать официальный способ Upstart (обратите внимание, что на данный момент не все службы были преобразованы в Upstart), мы могли бы использовать следующие команды:

status SERVICE- Это скажет нам, работает ли преобразованный сервис или нет. Обратите внимание , что это осуждается в пользу start, stop, statusи restart. Он также сообщит нам, если служба еще не была преобразована в upstart:

Преобразованная служба обычно выводит текущее состояние (запуск, запуск, остановка ...) и идентификатор процесса. Не преобразованный сервис выдаст ошибку о неизвестном задании .

Некоторые сочетания клавиш могут работать только с приведенной serviceвыше командой, но не с приведенными ниже командами, если они не на 100% преобразованы в службы upstart:

  • СТАРТ -sudo start mysql

  • СТОП -sudo stop mysql

  • RESTART -sudo restart mysql

  • СТАТУС -sudo status smbd

Включение / отключение службы

Чтобы отключить запуск или остановку службы, вам необходимо:

echo manual | sudo tee /etc/init/SERVICE.override

где раздел manualостановит Upstart от автоматической загрузки службы при следующей загрузке. Любая служба с .overrideокончанием будет иметь приоритет над исходным файлом службы. После этого вы сможете запустить службу только вручную. Если вы не хотите этого, просто удалите .override. Например:

echo manual | sudo tee /etc/init/mysql.override

Переводит сервис MySQL в manualрежим. Если вы не хотите этого, потом вы можете просто сделать

sudo rm /etc/init/mysql.override

и перезагрузитесь, чтобы служба снова запустилась автоматически. Конечно, чтобы включить службу, наиболее распространенным способом является ее установка. Если вы устанавливаете Apache, Nginx, MySQL или другие, они автоматически запускаются после завершения установки и запускаются каждый раз при загрузке компьютера. Отключение, как упомянуто выше, будет использовать сервис manual.


Вам нужно добавить .serviceк каждой команде? systemctl mongod statusработал просто отлично.
Дан Даскалеску

@DanDascalescu нет, не надо, но позвольте мне уточнить, что там.
Луис Альварадо

4
Нужно ли размещать файл .override в /etc/init.d/, т. Е. Где находится служба?
Оби Ван - PallavJha

Почему Upstart устарела в 15.04? Как правильно запускать сценарии при запуске / перезапуске в Ubuntu 16.04 или более поздней версии?
Камалаканнан Дж

1
Спасибо за этот исчерпывающий ответ. systemdНабор команд работает лакомство на Ubuntu 18.04.
Доктор Джей

354

В настоящее время существует три различных способа запуска программного обеспечения в качестве службы в Ubuntu, SysV , Upstart и systemd . Служба здесь определяется как программа, запускаемая системой в фоновом режиме, в отличие от программы, запускаемой и запускаемой непосредственно пользователем.

SysV

Традиционный способ запуска служб в Linux состоял в том, чтобы поместить сценарий /etc/init.dи затем использовать update-rc.dкоманду (или в дистрибутивах на основе RedHat chkconfig), чтобы включить или отключить его.

Эта команда использует слегка сложную логику для создания символических ссылок /etc/rc#.d, которые управляют порядком запуска служб. Если вы запустите, ls /etc/rc2.dвы можете увидеть порядок, в котором службы будут убиты с именем файла, как K##xxxxи началось с имен файлов S##xxxx. ##В S##xxxxозначает «стартовый заказ» для обслуживания xxxx. И наоборот, ##in K##xxxxозначает порядок уничтожения для обслуживания xxxx.

Одна из основных проблем с SysV заключалась в том, что при загрузке системы все должно выполняться последовательно, одно за другим, что делает время загрузки системы очень медленным . Были предприняты попытки распараллелить это, но они были случайными и их трудно было в полной мере использовать. Это было главной причиной создания Upstart .

Выскочка

Upstart использует файлы определения задания, /etc/initчтобы определить, по каким событиям должна быть запущена служба. Таким образом, пока система загружается, upstart обрабатывает различные события, а затем может запускать несколько служб параллельно. Это позволяет им полностью использовать ресурсы системы, например, путем запуска службы, связанной с диском, во время работы другой службы, связанной с ЦП, или когда сеть ожидает назначения динамического IP-адреса.

Вы можете увидеть все файлы выскочки, запустив ls /etc/init/*.conf

Позвольте мне остановиться здесь и сказать, что если вы не знаете, что такое сервис или что он делает, НЕ отключайте его!

Не все услуги были преобразованы в выскочку. Работая над командой серверов в Canonical в течение последних нескольких месяцев, я работал над несколькими преобразованными файлами заданий, и самое приятное в том, что он позволяет избавиться от всего «волшебства» сценария и просто вставить Несколько команд здесь и там, чтобы точно определить, как запустить службу, и ничего более. Но пока только несколько традиционных сетевых сервисов, таких как squid и samba , были преобразованы.

Является ли сервис выскочкой?

Чтобы выяснить, основана ли служба на выскочке, вы можете выполнить команду состояния:

status servicename

Если это выскочка , она покажет это:

$ status statd
statd start/running, process 942

Но если это не так, вы увидите нечто более похожее на это:

$ status apache2
status: Unknown job: apache2

В этом случае apache2не был преобразован в выскочку . Итак, чтобы отключить apache2вас просто запустить

sudo update-rc.d apache2 disable
sudo service apache2 stop

Отключить услуги (рабочие места) в выскочке

Определения заданий Upstart не имеют update-rc.dкоманды. Чтобы отключить задание, вам нужно отредактировать файл задания, чтобы отключить его. Есть два способа сделать это.

Если вы все еще хотите запустить его вручную, вам необходимо закомментировать start onусловие. Скажем, вы хотите установить samba , но не запускать его автоматически. Вот файл задания (в natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

Чтобы отключить самбу , вы можете просто поставить #перед " start on local-filesystems". Обратите внимание, что пока он не запустится при загрузке, на этот раз вам все равно нужно остановить

sudo service smbd stop

Однако, если вы никогда не хотите запускать samba , я бы предложил удалить пакет. Однако, если вы хотите, чтобы он был установлен, но не запускался, вы также можете сделать:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Отключить службу с помощью раздела «Старт / Стоп» (по состоянию на 11.04)

Начиная с версией выскочки , который будет в 11.04, есть новое ключевое слово , которое отключает start onи stop onстрофы: manual. Итак, еще один способ отключить службу с 11.04:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

Вы можете создать overrideфайл, чтобы отключить службу, не редактируя определение задания вообще, просто вставив в него manualключевое слово.


20
Похоже, 11.04 тоже имеет переопределение. Поэтому echo manual >> /etc/init/<service>.overrideпредпочтительнее, так как он оставляет исходный файл .conf без изменений. Как бы то ни было, до сих пор обидно, что на разработку такого базового включения / выключения ушло 3 года, и для этого нет графического интерфейса.
MestreLion

3
update-rc.d - это то, что действительно важно
Тимофей

2
Похоже, что гораздо более сложным является исходная тема, чем ответ, который был помечен как окончательный ответ исходным плакатом с вопросом. Спасибо! :)
Henning

1
В моем случае этот файл /etc/init/ssh.confсуществует , но status sshи status sshdкак говорят , «Неизвестная работа». Этот ответ, похоже, не рассматривает такую ​​возможность?
Брайан З

1
status sshдает мне «Неизвестную работу», но service ssh statusработает на меня
ptim

129

SysV-RC-конф

Попробуйте использовать sysv-rc-conf

sudo apt-get install sysv-rc-conf

и начать управлять услугами, выполнить

sudo sysv-rc-conf

Который выведет интерактивное окно, как это

введите описание изображения здесь

Вы можете далее перемещаться по страницам, используя Ctrl+nдля следующей страницы и Ctrl+pдля предыдущей страницы. Вы можете включать и отключать службы, выбирая SPACEнужные уровни запуска.

Работа-Admin

Другой альтернативой будет Jobs-Admin путем установки через

sudo apt-get install jobs-admin

Который также обеспечивает GUI, как это

jobs-admin Предварительный просмотр

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

chkconfig

И третий вариант будет chkconfig ,

sudo apt-get install chkconfig

Его можно использовать через интерфейс командной строки chkconfig, показывая список заданий вкл / выкл. Также мы можем просматривать системные сервисы используяchkconfig –list

Сервисы могут быть включены с помощью

chkconfig <service> on

Услуги могут быть отключены с помощью

chkconfig <service> off

И мы даже можем добавить наш собственный сервис, используя правильный скрипт инициализации с правильными заголовками.

chkconfig --add <service>

обновление-rc.d

И еще один вариант можно сослаться сюда update-rc.d , кратко объясненный здесь .

Обратите внимание, что для Ubuntu Server 12.04 update-rc.d вместо chkconfig используется.


1
на сервере Ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned

@pwned Вы можете редактировать и публиковать обновленную информацию о версии сервера. Спасибо.
atenz

Я сделал, как вы предложили, теперь это для экспертной оценки.
pwned

jobs-admin не позволяет менять работу (Ubuntu 14.04), вместо этого создается отчет о сбое ;-)
Sadi

5
sysv-rc-conf не подходит для использования с upstart или systemd, он явно предназначен только для старой системы System 5 rc, которая не применялась по умолчанию в Ubuntu Linux в течение почти десятилетия. Ошибка Debian # 791689 подтверждает это и спрашивает, почему он не помечен как конфликтующий с systemd.
JdeBP

48

Для тех из нас, кто запускает Ubuntu через ssh, я думаю, что самый хороший вариант rcconf- текстовая программа:

sudo apt-get install rcconf
sudo rcconf

альтернативный текст

Навигация с помощью клавиш со стрелками и клавишами, нажмите пробел, чтобы включить / отключить. Изменения сохраняются при перезагрузке.

Снимок экрана заимствован из этого поста , который также показывает sysv-rc-conf- аналогичный инструмент, который также позволяет установить уровень запуска. (Для тех, кому небезразличны уровни запуска, можно изменить их :)

К сожалению, rcconf не работает с upstart (сервисами, перечисленными в /etc/init/*), просто с традиционным механизмом ( ls -l /etc/init.d/*те, которые не являются символическими ссылками).

К счастью, многие из служб, которые имеют отношение при подключении к серверу (Apache, Tomcat, mdadm, boinc-client ...), еще не были перемещены в upstart.


6
Это все еще работает с выскочкой?
Октябрь

3
К сожалению нет. Но это сработало во всех случаях, которые я хотел изменить - задания upstart, по-видимому, в основном являются вещами, которые я никогда не хочу отключать - аппаратные часы, демон журнала, сеть и т. Д. (По крайней мере на сервере Ubuntu). Но это то, что нужно знать (я не был :), я обновил пост.
JG-Faustus

К сожалению, MySQL был преобразован в выскочку. И это сервис, который я использую только когда я делаю какой-то проект.
MestreLion

В Ubuntu 12.04 есть ошибка с rcconf, которая мешает запуску программы. Для решения проблемы вам необходимо установить диалоговое окно.
Деви

1
Поскольку этот ответ был написан, update-rc.dбыл изменен, а некоторые его устаревшие функциональные возможности были удалены . В ошибке Debian # 727735 отмечается, что rcconf не был изменен для соответствия. И нет, rcconf также не работает с systemd, поэтому он не применим ни к одной из стандартных систем инициализации Ubuntu Linux в течение последнего десятилетия.
JdeBP

18

Я обнаружил, что есть этот инструмент с графическим интерфейсом, похожий на BUM, но совместимый с Upstart:

  • Работа-Admin

    sudo apt-get install jobs-admin
    

Но это слишком просто и не позволяет менять «защищенные задания» (что это за вакансии? У Apple есть рабочие места, у операционной системы есть демоны!)
kakaz

Я даже не позволяю менять «незащищенные задания» (Ubuntu 14.04), вместо этого выдает отчет о сбое ;-)
Sadi

12

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

Взглянув на man 5 initодин, вы найдете более подходящее решение: использование переопределенной конфигурации. Краткий пример: скажем, у нас есть служба под названием «foobar», поэтому будет файл /etc/init/foobar.confс его конфигурацией upstart. Теперь вы не хотите ни удалять этот файл, ни изменять его - но вы также не хотите, чтобы эта служба работала? Так разместить переопределения файл рядом с ним: /etc/init/foobar.override, содержащим (необязательно заголовком с описанием и) вместо этого start on/ stop onстроки , которые вы поместите строку с одним словом: manual. Таким образом, вы говорите upstart в основном использовать foobar.conf, но переопределяете определение запуска, чтобы запускать эту службу только при принудительном применении вручную ( service foobar startв нашем примере).



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.