Сервер Apache не запускается автоматически

11

Я долгое время устанавливал Apache как часть настройки среды разработки на своем ноутбуке.

Однако, поскольку я остановил его несколько месяцев назад, он больше не запускается автоматически при загрузке. У меня есть эта проблема на моем ноутбуке дома и на моем ноутбуке на работе.

В обоих случаях я установил Apache в Ubuntu 10.10 несколько месяцев назад, несколько недель использовал его без сбоев, но однажды я остановил его, и теперь он больше не запускается автоматически. Я попытался запустить обновление rc для него вручную, но мне сказали, что сценарий инициализации уже используется.

Тем не менее, запуск / перезапуск вручную

sudo service apache2 start/restart

работает отлично. В обоих случаях я оставил это до обновления до 11.04, потому что надеялся, что это будет решено новой версией. Но это не так! Буду признателен, если кто-нибудь подскажет, как автоматически запустить Apache.

Карстен Аггер
источник

Ответы:

10

Попробуй запустить

update-rc.d apache2 enable [list of run levels]

как корень.

Вам может быть интересно читать

man update-rc.d
Ignar
источник
1
Большое спасибо, я выполнил команду (без списка уровней запуска, только значения по умолчанию), и, похоже, она работает. Вы знаете, почему это перестало работать? Я не возился со скриптами инициализации, я думаю, что просто остановил Apache из командной строки - но у меня не было намерения останавливать его навсегда . :-)
Карстен Аггер
У меня нет никакого мнения, почему оно перестало работать :) Может быть, после обновления что-то начало работать не правильно.
игнорировать
Спасибо, но это не помогает. Независимо от того, как я вызываю update-rc.d apache2 enable, apache снова перестает работать автоматически. Я всегда должен запустить его вручную. Кажется, нет никаких реальных проблем, так как он всегда запускается правильно, когда я делаю это вручную.
Карстен Аггер
9

Я добавляю этот ответ, основываясь на недавних проблемах, с которыми я столкнулся с теми же симптомами.

Сначала некоторые справочные данные:

  • Ubuntu использует скрипты в /etc/init.d/папке для запуска / остановки сервисов.
  • Ubuntu использует символические ссылки на эти /etc/init.d/скрипты, хранящиеся в /etc/rc#.d/папках, для запуска / остановки сервисов, основанных на «уровне выполнения».
  • Символические ссылки, начинающиеся с буквы «S», указывают, что служба должна быть запущена.
  • Символические ссылки, начинающиеся с буквы «K», указывают, что служба должна быть остановлена ​​(убита).
  • Уровень запуска 1 выполняет сценарии, на которых есть ссылки /etc/rc1.d/, уровень запуска 2 /etc/rc2.d/и так далее.
  • Уровень запуска по умолчанию для Ubuntu - 2.
  • По сути, выполняется установка Apache, sudo update-rc.d apache2 defaultsкоторая создает соответствующие символические ссылки в /etc/rc#.d/папках.

Таким образом, кажется, что на моем сервере что-то или кто-то, в какой-то момент работал, sudo update-rc.d apache2 disableудалял все символические ссылки «S» и заменял их символическими ссылками «K». Таким образом убивает или просто не запускает Apache при инициализации любого из уровней выполнения.

Моим решением было просто включить Apache:

sudo update-rc.d apache2 enable

Теперь Apache запускается / останавливается, как и ожидалось, при запуске или переключении уровней запуска.

NB:

Стоит отметить, что просто запустить sudo update-rc.d apache2 defaultsснова недостаточно, потому что он видит, что символические ссылки существуют, и считает, что это то, что нужно. Он просто отвечает:

System start/stop links for /etc/init.d/apache2 already exist.
Карл Уилбур
источник
1
Спасибо! Это было очень ценно при устранении неполадок в моей конфигурации.
изменить
1
У меня есть эта проблема, но это решение на удивление не сработало. Когда я запускаю, sudo update-rc.d apache2 enable defaultsон удаляет то, что у меня есть, а затем возвращает его обратно. Я имею K09apache2в rc0, 1 и 6, и я имею S91apache2в rc2, rc3, rc4, rc5. service apache2 startработает нормально, но я должен делать это после каждого перезапуска, так как он не запускается автоматически. mysql, с другой стороны, всегда запускается нормально.
Баттл Буткус
1
Те выглядят правильно. Возможно, вы захотите открыть новый вопрос с деталями вашей конкретной проблемы и обязательно включить соответствующие строки из ваших /var/log/syslogи /var/log/apache2/error.log. Напишите мне со ссылкой на вопрос, и я посмотрю, смогу ли я помочь.
Карл Уилбур
3

В этом случае я узнал, почему Apache не запускается. Я не смог найти следов этого в журналах запуска, только в выводе, напечатанном на экране при загрузке.

Но вот, пожалуйста: последняя строка в скрипте /etc/apache2/apache2.confне удалась.

Почему?

Это говорит:

Include sites-enabled/

Однако два сайта, которые я настроил, находятся в моем собственном домашнем каталоге, который зашифрован!

Таким образом, при загрузке (во время запуска Apache) эти сайты не существуют, и Apache не работает и отказывается работать.

Решение?

Я создал небольшой скрипт под названием «disable_sites» и слинкован его в /etc/rc0.dи /etc/rc6.d(отключения и перезагрузки):

#!/bin/bash

/usr/sbin/a2dissite vvsshop
/usr/sbin/a2dissite neoflex
/etc/init.d/apache2 reload

exit 0

Я также создал скрипт для повторного включения сайтов при каждом входе в систему и добавил его в качестве запускаемой программы в своих Системных настройках. Так что теперь это работает!

Итак, я полагаю, что урок здесь заключается в том, что когда Apache по необъяснимым причинам не удается загрузить во время загрузки, и вы не можете найти никаких ошибок в журналах или при запуске сервера вручную, проверьте, все ли необходимые каталоги доступны. Возможно, это можно решить и другим способом.

Карстен Аггер
источник
Я удивлен, что вы не нашли ошибок в логах. В прошлом я обнаружил, что некоторые ошибки запуска Apache были не в ожидаемом файле журнала, а в файле журнала для одного из моих виртуальных хостов. Может ли это быть так?
Мариус Гедминас
apachectl configtestуведомил бы вас об отсутствии разрешений на доступ к файлам при работе в качестве демона.
Anuga
1

Если вы ищете (погуглите) эту проблему, проверьте, что если вы запустите:

chkconfig |grep httpd

Вы получаете

httpd 0: выключен 1: выключен 2: включен 3: включен 4: включен 5: включен 6: выключен

еще сделать:

chkconfig httpd on

(извините на ubuntu chkconfig эквивалентен update- rc.d, см. альтернативу Chkconfig для Ubuntu Server? )

dfliess
источник
0

У меня была такая же проблема, и я запускаю Ubuntu 14 на локальной установке Vagrant. Я удалил /etc/apache2/sites-enabledкаталог и добавил ссылку на мой домашний каталог, который, конечно, смонтирован на моем локальном диске в соответствии с конфигами Vagrant.

Оказывается, apache не видел каталог, потому что ресурс еще не был подключен. Я переписал свое положение на Vagrant, чтобы просто скопировать sites-enabledкаталог вместо добавления символической ссылки.

Я также сделал, sudo update-rc.d apache2 enableкак было предложено, Karl Wilburчтобы убедиться, что apache init был включен.

user288900
источник