Nie można zatrzymać procesów apache

16

Aktualizacja: W odpowiedzi na komentarz:

sprawdź procesy apache:

$ ps a | grep apache 3
grep: 3: No such file or directory
$ ps a | grep apache
 4514 pts/0    S+     0:00 grep --color=auto apache
$ ps a | grep apache2
 4516 pts/0    S+     0:00 grep --color=auto apache2

sprawdzanie dziennika błędów apache

$ tail /var/log/apache2/error.log
[Sun Aug 07 03:14:19 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations
[Mon Aug 08 03:13:58 2011] [notice] Graceful restart requested, doing restart
[Mon Aug 08 03:14:00 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations
[Mon Aug 08 09:03:16 2011] [notice] caught SIGTERM, shutting down
[Mon Aug 08 09:05:47 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations

Oryginał: zatrzymałem apache, ale dlaczego nadal działa ta sama liczba uruchomionych procesów?

$ ps -A | grep apache
 1663 ?        00:00:00 apache2
 1667 ?        00:00:00 apache2
 1668 ?        00:00:00 apache2
 1669 ?        00:00:00 apache2
 1670 ?        00:00:00 apache2
 1671 ?        00:00:00 apache2
$ /etc/init.d/apache2 stop
 * Stopping web server apache2                            [ OK ] 
$ ps -A | grep apache
 1663 ?        00:00:00 apache2
 1667 ?        00:00:00 apache2
 1668 ?        00:00:00 apache2
 1669 ?        00:00:00 apache2
 1670 ?        00:00:00 apache2
 1671 ?        00:00:00 apache2

Dzięki!

Tim
źródło
(Przepraszam, nie mogę komentować, ponieważ nie mam wystarczającej liczby przedstawicieli). 1. Czy serwer WWW jest nadal dostępny w przeglądarce internetowej? 2. Sprawdź status swoich procesów. Mogą stać się „procesami zombie” ps a | grep apache 3. Sprawdź dzienniki błędów, mogą być przydatne tail /var/log/apache/error.log
SamK
1. Używam Firefoxa. To jest mój laptop. 2 i 3 zobacz moją aktualizację.
Tim
Czy próbowałeś tego „apache2 -k stop” lub „apache2 -k restart”? lub ponowne uruchomienie systemu?
blade19899

Odpowiedzi:

28

Może się to zdarzać czasami, gdy Apache odmawia dobrego zatrzymania lub ma Procesy Zombie . W przypadku tego pierwszego możesz zabić wszystkie uruchomione procesy sudo killall -9 apache2; jednak w przypadku tych ostatnich wystarczy poczekać, aż odejdą. W przypadku, gdy Apache nie chce ładnie przestać, naprawdę będziesz chciał zbadać, co się dzieje. Dokładne ustalenie, co się dzieje, może być trudne.

Interaktywny straceidentyfikator procesu może dać wskazówkę, które strony działają i powodują problemy. Z powyższego ps -Amożesz sprawdzić pierwszy proces za pomocą

strace -p 1663

Spowoduje to dołączenie do śledzenia stosu uruchomionych procesów, zapewniając bieżący wynik tego, co się dzieje. W dowolnym momencie możesz Ctrl+C

Dodatkowym zasobem jest główny dziennik błędów Apache, który można znaleźć w /var/log/apache2/error.log: Będziesz chciał uzyskać porządną porcję dziennika i przejrzeć go, aby uzyskać szczegółowe informacje. Jeśli problemem jest bieżący problem z uruchomieniem

tail -f /var/log/apache2/error.log

To podobne do stracebędzie działać w czasie rzeczywistym. Dla ostatniego N linii wymienić -fw -#przypadku gdy #jest to liczba dodatnia, jak 50, 100, 282, itd.

Marco Ceppi
źródło
7

Upewnij się, że masz odpowiednie uprawnienia do zatrzymania usługi.

Jeśli uruchomisz:

service apache2 stop

nie pojawi się żaden błąd tylko:

* Zatrzymywanie serwera WWW Apache2

Próbować:

sudo service apache2 stop      
jeremyforan
źródło
gdy nie ma wystarczającej ilości pamięci lub zamiana jest prawie pełna, to się nie powiedzie, killall to jedyne rozwiązanie
James Tan
3

Ja również miałem ten sam problem i próbowałem:

sudo apache2ctl stop

aby zatrzymać usługę, oraz

sudo apache2ctl start

aby zacząć od nowa.

To działa dla mnie, wszelkie możliwe sugestie są mile widziane.

Rudhin
źródło
1

Komenda systemctl stop apache2działała dla mnie.

IMTHATGUY P.
źródło
0

Procesy można poprosić (wysyłając do nich sygnał ) o zatrzymanie. killKomenda jest sposobem, aby to zrobić. Jeśli znasz identyfikator procesu (PID) procesu, możesz go ładnie zapytać, uruchamiając poniższe polecenie w terminalu:

kill PID_OF_YOUR_PROCESS

Powyższy przykład wysyła PID domyślny sygnał TERM (kod 15). Możesz wyszukać kody sygnałowe na stronie man kill ( man kill).

Gdy program zignoruje wysłany do nich sygnał TERM, nadal można zastosować nieco większy nacisk, wysyłając sygnał KILL (kod 9). Ten sygnał jest używany w ostateczności, ponieważ proces może nie zapisać niezapisanych danych.

Określenie -SIGNAL_CODEjako pierwszego parametru przed identyfikatorem procesu wyśle ​​procesowi określony sygnał. Inną przydatną funkcją killpolecenia jest to, że można podać więcej identyfikatorów PID, jak w poniższym przykładzie:

kill -9 PID1 PID2 PID3 PID4

Spróbuj zakończyć procesy Apache przy użyciu kill -9linii. Powinni przestać, chyba że coś ich powstrzyma.

Sean Kimball
źródło
Jeśli czytelnik nie zna polecenia „zabij”, prawie nie ma szans, że dowiedzą się, jak znaleźć PID procesu apache2.
Max Barraclough,
0

Miałem ten sam problem, ale nie możesz po prostu wykonać jednego service apache2 stoppolecenia - musisz wykonać jeden proces PER . Następnie MOŻESZ chcieć dodać z sudoprzodu na wypadek, gdybyś zalogował się na jakieś dziwne konto, które tego potrzebuje, więc jeśli zobaczysz 9 uruchomionych procesów, zrób 9sudo service apache2 stop

Działa świetnie dla mnie.

Piotr
źródło
-2

Po zainstalowaniu nginx mój apache przestał działać poprawnie. Wydaje się, że w niektórych przypadkach apache jest mylący z nginx. Po prostu usuń nginx

sudo apt-get purge nginx nginx-common
sudo apt-get autoremove
Manvel
źródło