Отключить запуск службы на всех уровнях запуска?

61

У меня есть сервис, fooкоторый в настоящее время начинается с уровня запуска 3 и выше. Как я могу помешать этому без использования update-rc.d foo stop 3 ., которое (если я правильно понимаю) будет отключать службу при каждом изменении уровня выполнения.

(т.е. если бы я был на уровне выполнения 1 и был включен foo, то при переходе на уровень выполнения 3 он был бы отключен, нет?)

Работает Debian GNU / Linux Lenny.

lfaraone
источник

Ответы:

57

Термин «стоп» не запрещает запуск демона, а скорее закрывает его при входе в указанный уровень выполнения.

Если вы просто хотите удалить службу / демон из одного уровня выполнения, update-rc.dкак было указано Bei Freiheit или просто удалить символическую ссылку из /etc/rcX.d/, где X ваш уровень запуска. Если вы не хотите, чтобы служба запускалась автоматически, это update-rc.d -f foo removeпоможет.

Пера
источник
2
Есть идеи, как это сделать на Debian 8? sudo update-rc.d -f sunrpc removeне работает; его все еще присутствует после перезагрузки.
Debian 9 Это не сработало для меня, и тогда я понял, о, сумасшедший, нужно sudo. update-rc.d не дает обратной связи, если вы забыли sudo. Я подтвердил, что ссылки исчезлиls /etc/rc*.d
Джейсон Дункельбергер,
Команда не удалась в Ubuntu16.04
Стефан
Убедитесь, что вы передали правильное имя сервиса, update-rc.d не даст вам никакой обратной связи, если он не существует.
marcovtwout
Что делать, если вы хотите включить его позже? Ниже @ "Not Now" ответ лучше, так как вы можете отключить и снова включить после. update-rc.d apache2 disable
Вади М.
54

Настройте загрузочные приложения Linux с помощью sysv-rc-conf :

apt-get install sysv-rc-conf

Как уже отмечали другие, здесь также есть update-rc.d для строки cmd.

Например, запустить

update-rc.d apache2 disable

отключить apache2 со всех уровней запуска.

Не сейчас
источник
отличный инструмент - не знал об этом. Спасибо!
Пера
1
обратите внимание, что это не остановит работающую службу, для этого вам необходимо добавить следующее: service foo stopили перезагрузить сервер
rubo77
15

Короткий:

Нет надежного способа сделать это быстро.

Долго:

Текущий Debian (Debian нестабильный по состоянию на 2012-06-01) в настоящее время не имеет надежного краткого способа последовательного отключения службы / демона. - Поскольку обновление пакета демона безоговорочно запускает «/etc/init.d/package restart», отключая его для этого уровня запуска или нет.

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

  • удалить его
  • сделать локальный переадресацию скрипта /etc/init.d/xyz (таким образом, инструменты не найдут его)
  • использовать / злоупотреблять файлом конфигурации соответствующего пакета, чтобы спровоцировать ранний выход этого скрипта (например, положить «выход» в начале / etc / default / xyz, если он получен из скрипта инициализации)
  • посмотрите в этом init-скрипте предопределенные «официальные» способы не запускать этого демона

Есть / был (?) Некоторый шаг init-policy-что-то для сценариев инициализации в Debian, который должен был заполнить эту недостающую функциональность. - Я пытался его использовать, нашел его сложным, нашел ошибку и больше никогда ее не трогал.

Обновить:

Переключитесь на «systemd», альтернативу «initd». Пакет Debian существует, и вы можете отключить службу с помощью чего-то вроде этого:

cd /etc/systemd/system
ln -s /dev/null xyz.service
Роберт Симер
источник
1
+1 Это такой полезный ответ - и если бы я не натолкнулся на это, меня бы ужалили позже - спасибо!
Вы можете так unlink xyz.serviceже хорошо?
Jaggedsoft
@NextLocal, я забыл, почему я это написал, но я верю, что если у службы есть сценарии инициализации System V, они systemdбудут использоваться. - Так что ссылка говорит не искать их.
Роберт Симер
Обратите внимание, что редактирование /etc/default/xyzфайла для добавления exitне помешает упаковщику перезаписать файл правильной версией при следующем обновлении. (Пакет сохраняет файлы конфигурации, и в большинстве случаев сценарии инициализации не рассматриваются как таковые.) Так что в большинстве случаев это не поможет.
Алексис
На помощь приходит Devuan: вместо systemd он использует классическую систему SysV rc.d / init.d (или openrc, если кто-то решит это сделать).
Csaba Toth
5

Запустите эту команду

apt-get установить rcconf

После установки запустите rcconf в SSH, и вы получите диалоговое окно, отображающее все службы, настроенные для запуска при загрузке. Выберите те, нажав пробел, чтобы отключить / включить конкретный, и все готово, просто нажмите кнопку ОК, и этот сервис не потрудится запустить снова при следующей загрузке. Используя это годами. Очень удобный инструмент для пользователей Debian / Ubuntu, таких как я.

Марк Левинский
источник
Легко, как 1,2,3! Спасибо за этот маленький инструмент командной строки.
DanielaWaranie
2

Я запутался в том, что ты пытаешься сделать.

На каких уровнях запуска вы хотите запустить foo?

Если вы всегда хотите, чтобы он работал, используйте update-rc.d foo defaults; это остановит его в 0, 1 и 6, оставив его работающим в 2, 3, 4 и 5. (1 не должен запускать ничего, кроме оболочки, 0 и 6 останавливаются и перезагружаются)

Если вы хотите точно указать, на каких уровнях запуска запускать:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .
Freiheit
источник
2

Я думаю, что это сделает работу: insserv -r foo

user38551
источник
1

Начните использовать insserv из Debian7

Вывести все сервисы и информацию об уровне выполнения

insserv --showall

Удалить перечисленные скрипты со всех уровней запуска

insserv --remove [specify_script]
какао
источник
0

Диспетчер загрузки Ubuntu - это своего рода sysv-rc-conf light , более дружественная версия с графическим интерфейсом, и многие, читающие эту ветку, оценят это.

http://www.marzocca.net/linux/bum.html


источник
0

На основе системы Red Hat вы могли бы использовать

chkconfig httpd off
chkconfig httpd --del

убрать сервер с уровней запуска

в системе на основе Debian все службы должны запускаться с помощью файлов, найденных в каталогах /etc/rc?.d/, и эти файлы имеют символическую ссылку на соответствующие файлы в каталоге /etc/init.d/. Если вы хотите, чтобы служба не запускалась по умолчанию, вы можете переименовать / удалить ее из каталога /etc/rc?.d, и ваши изменения будут сохранены при обновлении пакета, пока одна из стартовых ссылок все еще появляется в одной из другие (3,4 и 5) каталоги. Или вы можете использовать команду update-rc.d, чтобы изменить ссылку (и), и если вы хотите запустить службу после этого, вы можете использовать /etc/init.d/service_name start, если вы оставите запуск с конца, он будет дать вам варианты, которые могут быть использованы, как остановить, перезагрузить, перезагрузить ...

Я думаю, что вы можете использовать sysv-rc-conf, чтобы отключить его.

Rodent43
источник
Вопрос помечен как Debian, а не как Fedora или Red Hat.
0
sudo update-rc.d SERVICE disable

Если вы хотите указать уровни запуска.

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

Не забудьте сменить услугу на название программы.

sudo service SERVICE restart
Эдди
источник
0

Почему бы вам не сделать резервную копию сценария запуска в другом месте и удалить его в /etc/init.d/? Если update-rc.d не работает.

Косака Хонока
источник