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

7

Если я хочу запустить службу, установленную системой, я могу сделать:

# /etc/init.d/some-svc start
# initctl start some-svc
# service some-svc start
# start some-svc

Если я хочу отключить запуск службы при загрузке, я могу сделать:

# rm /etc/rc2.d/S99some-svc
# update-rc.d some-svc disable
# mv /etc/init/some-svc.conf /etc/init/some-svc.conf.disabled

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

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

Итак: если я хочу запустить или остановить службу, либо в настоящий момент, либо настойчиво, какой из этих инструментов должен использовать и почему? Если ответ зависит от некоторого атрибута (например, «эта служба поддерживает выскочку»), то как мне быстро и легко узнать об этом атрибуте установленного пакета?

Кроме того, существуют ли какие-либо инструменты пользовательского интерфейса, которые могут безопасно и правильно взаимодействовать с современной инфраструктурой обслуживания (выскочка и / или независимо от их совместимости с sysv)? Например, могу ли я надежно использовать sysv-rc-conf , чтобы определить, какие службы должны запускаться?

    
задан Glyph 11.10.2012 в 05:01
источник

1 ответ

9

Функционально нет никакой разницы между любым из этих методов вызова.

start и stop - символические ссылки на initctl. service - это сценарий оболочки, который определяет, следует ли выполнять скрипт инициализации или использовать initctl.

Самый простой способ увидеть, что такое работа Upstart, - посмотреть /etc/init/ . Все, что есть в работе Upstart. Если вы ls -l /etc/init.d/ , вы увидите каждую служебную и системную задачу. Задачи инициализации SysV будут реальными файлами, а задания Upstart будут символическими ссылками на /lib/init/upstart-job , которые будут правильно запускать задачу Upstart.

Другими словами, вы также можете вызывать задания Upstart, вызывая, например, /etc/init.d/apport restart , хотя выход будет предлагать вместо этого использовать службу, запуск или остановку.

Таким образом, на практике это не имеет значения (пока!). Но если бы я что-то скриптировал, я бы, конечно, использовал сервис, начало или остановку, так как почти нет никаких шансов, которые будут устаревать, тогда как вызовы через /etc/init.d/ могут уйти по дороге (хотя, вероятно, не в любое время в ближайшее время).

Примечание об отключении служб: переименование файла .conf работает, но я не рекомендую его. Вы можете отключить службу таким образом, но если есть доступное обновление пакета, dpkg скопирует новую копию задания Upstart и не намеревается, ваша служба снова будет включена. Правильный способ отключения задания Upstart - использовать файл переопределения , который оставляет исходное задание неповрежденным.

Например, чтобы отключить apport, просто создайте файл с именем /etc/init/apport.override , который содержит слово «manual».

# echo "manual" > /etc/init/apport.override

Лично я бы избежал использования sysv-rc-conf . Это может быть достаточно безопасно, чтобы использовать его для изменения SysV-заданий, но я не уверен; он, похоже, не поддерживает рабочие места Upstart, и нет способа рассказать об интерфейсе, который есть. Я бы придерживался update-rc.d для управления скриптами SysV.

Для получения дополнительной информации о Upstart см .:

  1. The Upstart Cookbook: Ссылка
  2. Команда man 5 init : Ссылка
ответ дан Mark Russell 18.10.2012 в 15:48
источник