Назад | Перейти на главную страницу

Как остановить автоматический запуск nginx при установке?

Я пытаюсь установить Nginx на Ubuntu 16.04 с помощью следующей команды: sudo apt-get install nginx

Но я получаю следующую ошибку:

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
invoke-rc.d: initscript nginx, action "start" failed.
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2017-07-11 16:41:31 UTC; 6ms ago
  Process: 17851 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
 Main PID: 31524 (code=exited, status=0/SUCCESS)

Jul 11 16:41:31 vm systemd[1]: Starting A high performance web server and a reverse proxy s...r...
Jul 11 16:41:31 vm nginx[17851]: nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: N...ory)
Jul 11 16:41:31 vm nginx[17851]: nginx: configuration file /etc/nginx/nginx.conf test failed
Jul 11 16:41:31 vm systemd[1]: nginx.service: Control process exited, code=exited status=1
Jul 11 16:41:31 vm systemd[1]: Failed to start A high performance web server and a reverse ...ver.
Jul 11 16:41:31 vm systemd[1]: nginx.service: Unit entered failed state.
Jul 11 16:41:31 vm systemd[1]: nginx.service: Failed with result 'exit-code'.
Hint: Some lines were ellipsized, use -l to show in full.
dpkg: error processing package nginx-core (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of nginx:
 nginx depends on nginx-core (>= 1.10.3-0ubuntu0.16.04.1) | nginx-full (>= 1.10.3-0ubuntu0.16.04.1) | nginx-light (>= 1.10.3-0ubuntu0.16.04.1) | nginx-extras (>= 1.10.3-0ubuntu0.16.04.1); however:
  Package nginx-core is not configured yet.
  Package nginx-full is not installed.
  Package nginx-light is not installed.
  Package nginx-extras is not installed.
 nginx depends on nginx-core (<< 1.10.3-0ubuntu0.16.04.1.1~) | nginx-full (<< 1.10.3-0ubuntu0.16.04.1.1~) | nginx-light (<< 1.10.3-0ubuntu0.16.04.1.1~) | nginx-extras (<< 1.10.3-0ubuntu0.16.04.1.1~); however:
  Package nginx-core is not configured yet.
  Package nginx-full is not installed.
  Package nginx-light is not installed.
  Package nginx-extras is not installed.

dpkg: error processing package nginx (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
  Errors were encountered while processing:
 nginx-core
 nginx

Я думаю, что он пытается запустить nginx автоматически по умолчанию после установки, но не может найти файлы конфигурации nginx. Как я могу остановить его автоматический запуск сразу после установки, чтобы мой apt-get install команда не терпит неудачу.

В дистрибутивах на основе Debian при установке запускаются и включаются неудачные установки по умолчанию. Это обычно вызывает проблему ужасных ошибок, возникающих при установке сервисов, которые не содержат собственной сквозной конфигурации по умолчанию, а также кучу мусора при использовании продуктов CM, которые читают такой выходной поток напрямую, например Ansible.

Вы можете изменить этот пакет по умолчанию, но для этого потребуется переупаковать приложение (в данном случае nginx) либо на компьютере локально, либо через что-то с помощью службы зеркалирования, такой как Foreman или Satellite.

Я лично решаю эту проблему, используя CentOS везде, где могу, которая имеет разумное значение по умолчанию «остановлено и отключено». Однако это не очень универсальное решение.

Выполните следующие действия, чтобы переупаковать пакет deb:

1: Извлечь пакет deb

`# dpkg-deb -x <package.deb> <dir>`

2: Извлечь управляющую информацию из пакета

`# dpkg-deb -e <package.deb> <dir/DEBIAN>`
  1. После внесения любых изменений пакета перепакуйте deb

# dpkg-deb -b <dir> <new-package.deb>

  1. Вы можете установить этот deb локально или добавить его в службу зеркала (если она у вас есть).

В качестве альтернативы, вот умный способ обойти эту проблему, с которой я бессовестно копаю major.io. Он действует как переключатель, который можно включать и выключать, чтобы новые пакеты не запускали свои службы. Имейте в виду, что это НЕ "отключает" эти службы, поэтому перезагрузка приведет к их запуску, если вы явно не отключили их заранее:

Если вы хотите предотвратить запуск демонов после установки пакета, просто добавьте несколько строк в /usr/sbin/policy-rc.d:

cat > /usr/sbin/policy-rc.d < < EOF
#!/bin/sh
echo "All runlevel operations denied by policy" >&2
exit 101
EOF

Теперь установите все необходимые пакеты, и демоны останутся остановленными, пока вы их не запустите (или не перезагрузите сервер). Не забудьте удалить добавленный файл политики после завершения установки пакетов.

Если вы используете это с чем-то вроде Ansible, это будет легко включить и выключить до и после выполнения. Это также решит проблему появления уродливых ошибок при установке пакетов Debian.