Serwer Apache nie uruchamia się automatycznie

11

Zainstalowałem Apache przez długi czas w ramach konfigurowania środowiska programistycznego na moim laptopie.

Ponieważ jednak zatrzymałem go kilka miesięcy temu, nie uruchamia się już automatycznie przy starcie. Mam ten problem na laptopie w domu ORAZ na laptopie w pracy.

W obu przypadkach zainstalowałem Apache w Ubuntu 10.10 kilka miesięcy temu, używałem go przez kilka tygodni bez usterki, ale pewnego dnia przestałem go, a teraz nie uruchamia się automatycznie. Próbowałem uruchomić aktualizację rc dla niego ręcznie, ale powiedziano mi, że skrypt init jest już w użyciu.

Jednak uruchamianie / restartowanie go ręcznie za pomocą

sudo service apache2 start/restart

działa w porządku. W obu przypadkach pozwoliłem na to dopiero po aktualizacji do 11.04, ponieważ miałem nadzieję, że zostanie to rozwiązane przez nową wersję. Ale nie jest! Byłbym wdzięczny, gdyby ktoś mógł mi powiedzieć, jak ponownie uruchomić Apache automatycznie.

Carsten Agger
źródło

Odpowiedzi:

10

Spróbuj uciec

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

jako root.

Możesz przeczytać

man update-rc.d
ignorować
źródło
1
Wielkie dzięki, uruchomiłem polecenie (bez listy poziomów uruchamiania, tylko domyślne) i wydaje się, że działa. Czy wiesz, dlaczego to przestało działać? Nie bawiłem się skryptami inicjującymi, myślę, że właśnie zatrzymałem Apache z linii poleceń - ale nie miałem zamiaru zatrzymać go na stałe . :-)
Carsten Agger,
Nie mam zdania, dlaczego przestał działać :) Może po aktualizacji coś zacznie działać nieprawidłowo.
zignoruj
Dzięki, ale to nie pomaga. Bez względu na to, jak nazywam enable update-rc.d apache2, apache przestaje działać automatycznie. Zawsze muszę go uruchomić ręcznie. Wydaje się, że nie ma żadnych rzeczywistych problemów, ponieważ zawsze zaczyna się poprawnie, gdy robię to ręcznie.
Carsten Agger
9

Dodaję tę odpowiedź w oparciu o ostatnie problemy, które napotkałem z tymi samymi objawami.

Najpierw jakieś dane w tle:

  • Ubuntu używa skryptów w /etc/init.d/folderze do uruchamiania / zatrzymywania usług.
  • Ubuntu używa dowiązań symbolicznych do tych /etc/init.d/skryptów, przechowywanych w /etc/rc#.d/folderach, w celu uruchamiania / zatrzymywania usług opartych na „poziomie pracy”.
  • Łącza symboliczne rozpoczynające się od litery „S” wskazują, że usługa powinna zostać uruchomiona.
  • Łącza symboliczne rozpoczynające się od litery „K” wskazują, że usługa powinna zostać zatrzymana (zabita).
  • Runlevel 1 wykonuje skrypty dowiązane symbolicznie /etc/rc1.d/, używa runlevel 2 /etc/rc2.d/i tak dalej.
  • Domyślny poziom działania Ubuntu to 2.
  • Instalacja Apache zasadniczo przebiega, sudo update-rc.d apache2 defaultsco tworzy odpowiednie dowiązania symboliczne w /etc/rc#.d/folderach.

Wygląda więc na to, że na moim serwerze coś lub ktoś w pewnym momencie uruchomił, sudo update-rc.d apache2 disableco usunęło wszystkie dowiązania symboliczne „S” i zastąpiło je dowiązaniami symbolicznymi „K”. Dlatego zabijanie lub po prostu nie uruchamianie Apache podczas inicjowania któregokolwiek z poziomów pracy.

Moim rozwiązaniem było ponowne włączenie Apache:

sudo update-rc.d apache2 enable

Teraz Apache uruchamia się / zatrzymuje zgodnie z oczekiwaniami podczas uruchamiania lub przełączania poziomów pracy.

NB:

Warto zauważyć, że sudo update-rc.d apache2 defaultsponowne uruchomienie jest niewystarczające, ponieważ widzi, że istnieją dowiązania symboliczne i uważa, że ​​są one tym, czego chcemy. Po prostu odpowiada:

System start/stop links for /etc/init.d/apache2 already exist.
Karl Wilbur
źródło
1
Dziękuję Ci! Było to bardzo cenne podczas rozwiązywania problemów z moją konfiguracją.
reor
1
Mam ten problem, ale to zaskakujące rozwiązanie nie zadziałało. Po uruchomieniu sudo update-rc.d apache2 enable defaultsusuwa to, co mam, a następnie przywraca je z powrotem. Mam K09apache2w rc0, 1 i 6, i mam S91apache2w rc2, rc3, rc4, rc5. service apache2 startdziała dobrze, ale muszę to zrobić po każdym ponownym uruchomieniu, ponieważ nie uruchomi się automatycznie. Z drugiej strony mysql zawsze dobrze się uruchamia.
Buttle Butkus,
1
Te wyglądają dobrze. Możesz otworzyć nowe pytanie ze szczegółami konkretnego problemu i pamiętaj o dołączeniu odpowiednich wierszy z twojego /var/log/syslogi /var/log/apache2/error.log. Wyślij do mnie link do pytania, a zobaczę, czy mogę pomóc.
Karl Wilbur
3

W tym przypadku dowiedziałem się, dlaczego Apache nie chce się uruchomić. Nie mogłem znaleźć śladu tego w dziennikach uruchamiania, tylko w danych wyjściowych drukowanych na ekranie podczas uruchamiania.

Ale proszę bardzo: ostatni wiersz skryptu /etc/apache2/apache2.confnie powiódł się.

Dlaczego?

To mówi:

Include sites-enabled/

Jednak dwie strony, które skonfigurowałem, znajdują się w moim własnym katalogu domowym - który jest zaszyfrowany!

Tak więc podczas uruchamiania (podczas uruchamiania Apache) strony te nie istnieją, a Apache ulega awarii i odmawia uruchomienia.

Rozwiązanie?

Stworzyłem mały skrypt o nazwie „disable_sites” i dowiązałem go symbolicznie do /etc/rc0.di /etc/rc6.d(zamknij i uruchom ponownie):

#!/bin/bash

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

exit 0

Stworzyłem również skrypt, aby ponownie włączyć witryny przy każdym logowaniu i dodałem go jako program startowy w Ustawieniach systemu. Więc teraz to działa!

Przypuszczam, że lekcja tutaj polega na tym, że gdy Apache w niewytłumaczalny sposób nie ładuje się podczas uruchamiania i nie możesz znaleźć błędów w logach lub podczas ręcznego uruchamiania serwera, sprawdź, czy wszystkie potrzebne katalogi są dostępne. Można to prawdopodobnie rozwiązać w inny sposób.

Carsten Agger
źródło
Dziwię się, że nie znalazłeś żadnych błędów w logach. W przeszłości odkryłem, że niektóre błędy uruchamiania Apache nie były w oczekiwanym pliku dziennika, ale w pliku dziennika dla jednego z moich wirtualnych hostów. Czy może tak być?
Marius Gedminas
apachectl configtestpowiadomiłby cię o braku uprawnień dostępu do plików podczas działania jako demon.
Anuga
1

W przypadku innych osób szukających (google) tego problemu sprawdź, czy po uruchomieniu:

chkconfig |grep httpd

dostajesz

httpd 0: wyłączony 1: wyłączony 2: włączony 3: włączony 4: włączony 5: włączony 6: wyłączony

jeszcze zrobić:

chkconfig httpd on

(przepraszam na Ubuntu Chkconfig odpowiednikiem jest update-rc.d zobacz alternatywę Chkconfig dla Ubuntu Server? )

motyle
źródło
0

Miałem ten sam problem i używam Ubuntu 14 na lokalnej instalacji Vagrant. Usunąłem /etc/apache2/sites-enabledkatalog i dodałem łącze do mojego katalogu domowego, który oczywiście jest zamontowany na moim dysku lokalnym zgodnie z Vagrant configs.

Okazuje się, że apache nie widział katalogu, ponieważ zasób nie został jeszcze zamontowany. Przepisałem przepis w Vagrant, aby po prostu skopiować sites-enabledkatalog zamiast dodawać dowiązanie symboliczne.

Zrobiłem także sudo update-rc.d apache2 enablezgodnie z sugestią by Karl Wilburupewnić się, że init Apache jest włączony.

użytkownik 288900
źródło