Không thể dừng quá trình apache


16

Cập nhật: Trả lời bình luận:

kiểm tra quá trình 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

kiểm tra nhật ký lỗi 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

Bản gốc: Tôi đã dừng apache, nhưng tại sao nó vẫn có cùng số lượng tiến trình đang chạy?

$ 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

Cảm ơn!


(Xin lỗi tôi không thể nhận xét vì tôi không đủ đại diện.) 1. Trình phục vụ web có còn khả dụng với trình duyệt web không? 2. Kiểm tra trạng thái của các quy trình của bạn. Họ có thể đã trở thành "quá trình Zombie" ps a | grep apache 3. Kiểm tra nhật ký lỗi, đuôi có thể hữu ích /var/log/apache/error.log
SamK

1. Tôi đang sử dụng firefox. Nó là máy tính xách tay của tôi 2 và 3 xem cập nhật của tôi.
StackExchange cho tất cả

Bạn đã thử 'apache2 -k stop' hay 'apache2 -k restart' chưa? hoặc khởi động lại hệ thống của bạn?
lưỡi19899

Câu trả lời:


27

Điều này đôi khi có thể xảy ra khi Apache từ chối dừng độc đáo hoặc có Quy trình Zombie . Đối với trước đây bạn có thể giết tất cả các quy trình đang chạy với sudo killall -9 apache2; tuy nhiên, về sau bạn sẽ đơn giản cần đợi chúng biến mất. Trong trường hợp Apache không muốn dừng lại một cách độc đáo, điều bạn thực sự muốn làm là điều tra những gì đang diễn ra. Tìm ra chính xác những gì đang xảy ra có thể khó khăn mặc dù.

Một tương tác stracecủa id quá trình có thể cho mượn manh mối về việc trang web nào đang hoạt động và gây ra sự cố. Từ trên của ps -Abạn, bạn có thể kiểm tra quá trình đầu tiên với

strace -p 1663

Điều này sẽ gắn vào dấu vết ngăn xếp quy trình đang chạy cung cấp đầu ra trực tiếp của những gì đang diễn ra. Bất cứ lúc nào bạn có thể Ctrl+C

Một tài nguyên bổ sung là nhật ký lỗi chính cho Apache, điều này có thể được tìm thấy trong /var/log/apache2/error.logBạn muốn lấy một đoạn nhật ký kha khá và đọc lướt nó để biết chi tiết. Nếu vấn đề là một vấn đề đang diễn ra

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

Điều này tương tự như stracesẽ chạy trong thời gian thực. Đối với N dòng cuối cùng thay thế -fbằng -#số #là số dương như 50, 100, 282, v.v.


7

Hãy chắc chắn rằng bạn có quyền thích hợp để dừng dịch vụ.

Nếu bạn chạy:

service apache2 stop

bạn sẽ không nhận được bất kỳ lỗi nào chỉ:

* Dừng máy chủ web apache2

Thử:

sudo service apache2 stop      

khi không có đủ bộ nhớ hoặc trao đổi gần đầy, điều này sẽ thất bại, killall là giải pháp duy nhất
James Tan

3

Tôi cũng có vấn đề tương tự, và đã thử như sau:

sudo apache2ctl stop

dừng dịch vụ và

sudo apache2ctl start

để bắt đầu lại

Nó làm việc cho tôi, bất kỳ đề nghị có thể được chào đón.



0

Quá trình có thể được yêu cầu (bằng cách gửi tín hiệu cho họ) để dừng lại. Các killlệnh là một cách để làm điều đó. Nếu bạn biết ID tiến trình (PID) của quy trình, có thể yêu cầu độc đáo bằng cách chạy lệnh bên dưới trong một thiết bị đầu cuối:

kill PID_OF_YOUR_PROCESS

Ví dụ trên gửi tín hiệu TATE mặc định (mã 15). Bạn có thể tra cứu mã tín hiệu trong trang man of kill ( man kill).

Khi chương trình bỏ qua tín hiệu TATE gửi cho họ, vẫn có thể áp dụng áp lực cao hơn một chút bằng cách gửi tín hiệu KILL (mã 9). Tín hiệu này được sử dụng như là phương sách cuối cùng, bởi vì quá trình có thể không lưu bất kỳ dữ liệu chưa được lưu nào.

Chỉ định một -SIGNAL_CODEtham số đầu tiên trước ID tiến trình sẽ gửi quy trình tín hiệu cụ thể. Một tính năng hữu ích khác của killlệnh là bạn có thể chỉ định thêm nhiều PID như trong ví dụ sau:

kill -9 PID1 PID2 PID3 PID4

Cố gắng chấm dứt các quy trình Apache bằng cách sử dụng kill -9dòng. Họ nên dừng lại trừ khi có thứ gì đó ngăn họ làm như vậy.


Nếu người đọc không quen thuộc với lệnh 'kill', gần như không có khả năng họ sẽ biết cách tìm ra PID của quá trình apache2.
Max Barraclough

0

Tôi có cùng một vấn đề nhưng bạn không thể thực hiện một service apache2 stoplệnh - bạn phải thực hiện một quy trình PER . Sau đó, bạn CÓ THỂ muốn thêm một sudotài khoản phía trước trong trường hợp bạn đăng nhập vào một số tài khoản kỳ lạ cần nó vì vậy nếu bạn thấy 9 quy trình đang chạy, hãy thực hiện 9sudo service apache2 stop

Làm việc tuyệt vời cho tôi.


-2

Sau khi cài đặt nginx, apache của tôi ngừng hoạt động bình thường. Có vẻ trong một số trường hợp apache khó hiểu với nginx. Chỉ cần loại bỏ nginx

sudo apt-get purge nginx nginx-common
sudo apt-get autoremove
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.