В настоящее время существует три различных способа запуска программного обеспечения в качестве службы в 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
ключевое слово.