служба systemd stop при удалении пакета

Я сделал * .deb со службой:

[Unit]
Description=Hello example service
Wants=nginx

[Service]
Type=simple
ExecStart=/usr/local/bin/hello

TimeoutStopSec=15
Restart=always

postinst (не влияет ни на что, кроме как дает ошибку во время установки, если используется: update-rc.d: error: initscript does not exist: /etc/init.d/hello):

update-rc.d hello defaults
invoke-rc.d nginx reload

prerm Сценарий Debian для него:

invoke-rc.d hello stop

Этот скрипт не останавливает службу. Он не работает, даже если запущен вручную. Возвращает 102 каждый раз.

systemctl stop отлично работает для моего сервиса.

Каким-то образом invoke-rc.d работает для веб-сервера:

sudo invoke-rc.d nginx stop

Что происходит?

0
задан 30 April 2015 в 16:04

1 ответ

invoke-rc.d команда является для sysv init сценариями (как в его странице справочника говорится), не Выскочка или systemd. Nginx все еще имеет sysv init, сценарий (искать init.d в списке файлов), который является, вероятно, почему invoke-rc.d работы для него (или кажется, так или иначе).

Даже при том, что руководства Debian используют invoke-rc.d, на Ubuntu предпочтите использовать service команда. Это - сценарий обертки, который может обработать sysv init, Выскочку и systemd файлы.

systemd документация рекомендует использовать service также:

Если Ваше распределение удаляет сценарии SysV init в пользу systemd ввода файлов единицы /etc/init.d/foobar start запустить сервис не будет работать, так как сценарий не будет доступен. Используйте более корректное /sbin/service foobar start вместо этого, и Ваша команда будет направлена к systemd. Обратите внимание, что вызов init сценария непосредственно всегда был субоптимальным, так как слишком много контекста выполнения вызывающей стороны (блок среды, umask, пределы ресурса, журналы аудита...) закончило тем, что было наследовано обслуживанием и вызовом через /sbin/service используемый для чистки этого по крайней мере частично. Вызов через/sbin/service работает и над SysV и над systemd системами. Кроме того, LSB только стандартизирует вызов через /sbin/service так или иначе. (Обратите внимание, что некоторые дистрибутивы поставляют и systemd файлы единицы и сценарии SysV для сервисов. Поскольку они вызывающие init сценарии будут работать как ожидалось и запрос быть переданными systemd в любом случае.)

Конечно, для Ubuntu, service расположен в /usr/sbin/service.

0
ответ дан 30 April 2015 в 16:04

Другие вопросы по тегам:

Похожие вопросы: