В настоящее время существует три разных способа запуска программного обеспечения в качестве службы в 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
. И наоборот, ##
в K##xxxx
означает порядок уничтожения для сервиса xxxx
.
Одна из основных проблем с SysV заключалась в том, что при загрузке системы все должно было быть сделано в последовательном порядке, одно за другим, что делает загрузку системы очень медленной . Были предприняты попытки распараллелить это, но они были случайными и трудными в полной мере использовать. Это было основной причиной создания Upstart .
Upstart
Upstart использует файлы определения заданий в /etc/init
, чтобы определить, в каких событиях должна запускаться служба. Таким образом, пока система загружается, выскочка обрабатывает различные события, а затем может запускать несколько служб параллельно. Это позволяет им полностью использовать ресурсы системы, например, путем запуска службы, связанной с диском, в то время как другая служба, связанная с процессором, запускается или пока сеть ожидает назначения динамического IP-адреса.
Вы можете просмотреть все файлы стартовых заданий, запустив ls /etc/init/*.conf
Позвольте мне просто остановиться здесь и сказать, что, если вы не знаете, что такое служба или что она делает, НЕ отключайте ее!
Не все службы были преобразованы в выскочку. Во время работы над командой сервера в Canonical за последние несколько месяцев я работал над несколькими преобразованными файлами заданий, и самая приятная часть - это то, что он позволяет избавиться от всего скрипта «магия» и просто вставить несколько команд здесь и там, чтобы точно определить, как запустить службу, и не более того. Но на данный момент были преобразованы только несколько традиционных сетевых сервисов, таких как squid и samba .
Является ли служба на основе выскочки?
Чтобы выяснить, работает ли служба с выскочкой, вы можете запустить команду status:
status servicename
Если это задание upstart , оно покажет следующее:
$ status statd
statd start/running, process 942
Но если это не так, вы увидите нечто подобное:
$ status apache2
status: Unknown job: apache2
В этом случае apache2
не было преобразовано в upstart . Итак, чтобы отключить apache2
, вы просто запустите
sudo update-rc.d apache2 disable
sudo service apache2 stop
Отключить службы (задания) в upstart
Определения заданий Upstart не имеют команды update-rc.d
. Чтобы отключить задание, вам нужно отредактировать файл задания напрямую, чтобы отключить его. Есть два способа сделать это.
Если вы все еще хотите запустить его вручную, вам необходимо закомментировать условие start on
. Предположим, вы хотите установить samba , но не запускать его автоматически. Вот файл задания (в natty):
description "SMB/CIFS File Server"
author "Steve Langasek <[email protected]>"
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
Чтобы отключить samba , вы можете просто поставить #
перед « 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
stanzas: manual
. Таким образом, еще один способ отключить службу с 11.04:
echo 'manual' | sudo tee /etc/init/mysql.override
# command from root shell
echo manual >> /etc/init/mysql.override
Вы можете создать файл override
, чтобы отключить службу без изменения определения задания, просто разместив в нем ключевое слово manual
.