В настоящее время на самом деле существует три различных способа запуска программного обеспечения в качестве службы в Ubuntu, SysV, Выскочка и 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 использует файлы определения заданий в /etc/init
чтобы определить, по каким событиям следует запускать службу. Итак, пока система загружается, upstart обрабатывает различные события, а затем может запускать несколько служб параллельно. Это позволяет им полностью использовать ресурсы системы, например, путем запуска службы, привязанной к диску, во время выполнения другой службы, привязанной к процессору, или в то время как сеть ожидает назначения динамического IP-адреса.
Вы можете просмотреть все файлы заданий upstart, выполнив ls /etc/init/*.conf
Позвольте мне просто остановиться здесь и сказать, что если вы не знаете, что такое служба или что она делает, НЕ отключайте ее!
Не все сервисы были преобразованы в upstart. Работая в команде сервера в Canonical в течение последних нескольких месяцев, я работал над несколькими преобразованными файлами заданий, и самое приятное, что это позволяет избавиться от всей "магии" скрипта и просто ввести несколько команд здесь и там, чтобы точно определить, как начать служба, и ничего больше. Но на данный момент существует лишь несколько традиционных сетевых сервисов, таких как кальмар и самба, были преобразованы.
Основан ли сервис на выскочке?
Чтобы выяснить, основана ли служба на запуске, вы можете выполнить команду status:
status servicename
Если это выскочка работа, она покажет это:
$ status statdstatd start/running, process 942
Но если это не так, вы увидите нечто большее, похожее на это:
$ status apache2status: Unknown job: apache2
В этом случае, apache2
не был преобразован в выскочка. Итак, чтобы отключить apache2
ты просто бежишь
sudo update-rc.d apache2 disablesudo service apache2 stop
Отключить службы (задания) в upstart
Определения должностей выскочек не имеют update-rc.d
команда. Чтобы отключить задание, вам необходимо отредактировать файл задания напрямую, чтобы отключить его. Есть два способа сделать это.
Если вы хотите по-прежнему иметь возможность запускать его вручную, то вам нужно закомментировать start on
состояние. Допустим, вы хотите установить самба, но не заставляйте его запускаться автоматически. Вот файл задания (на чистом языке):
description "SMB/CIFS File Server"author "Steve Langasek <steve.langasek@ubuntu.com>"start on local-filesystemsstop on runlevel [!2345]respawnpre-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/sambaend scriptexec smbd -F
Отключить самба, вы можете просто поставить #
перед "start on local-filesystems
". Обратите внимание, что, хотя он не запустится при загрузке, вам все равно нужно остановить его на этот раз с помощью
sudo service smbd stop
Если, однако, вы никогда не захотите самба для начала я бы предложил на самом деле удалить пакет. Однако, если вы хотите, чтобы он был установлен, но не доступен для запуска, вы также можете сделать:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Отключить службу с помощью start/stop stanza (по состоянию на 11.04)
Начиная с версии upstart, которая будет в 11.04, появилось новое ключевое слово, которое отключает start on
и stop on
строфы: manual
. Итак, еще один способ отключить службу с 11.04 - это сделать:
echo 'manual' | sudo tee /etc/init/mysql.override# command from root shellecho manual >> /etc/init/mysql.override
Вы можете создать override
файл для отключения службы вообще без редактирования определения задания, просто поместив manual
ключевое слово в нем.