ไม่สามารถหยุดกระบวนการ apache


16

อัปเดต:ตอบสนองต่อความคิดเห็น:

ตรวจสอบกระบวนการของ 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

การตรวจสอบบันทึกข้อผิดพลาด 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

Original:ฉันหยุด apache แล้ว แต่ทำไมมันยังมีจำนวนโพรเซสเหมือนเดิม?

$ 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

ขอบคุณ!


(ขออภัยฉันไม่สามารถแสดงความคิดเห็น 'เพราะฉันมีตัวแทนไม่เพียงพอ) 1. เว็บเซอร์เวอร์ยังคงใช้งานได้กับเว็บเบราว์เซอร์หรือไม่? 2. ตรวจสอบสถานะของกระบวนการของคุณ พวกมันอาจกลายเป็น "กระบวนการซอมบี้" ps a | grep apache 3. ตรวจสอบบันทึกข้อผิดพลาดอาจมีประโยชน์หาง /var/log/apache/error.log
SamK

1. ฉันใช้ Firefox มันคือแล็ปท็อปของฉัน 2 และ 3 ดูการอัปเดตของฉัน
StackExchange สำหรับทั้งหมด

คุณลองใช้งาน 'apache2 -k stop' หรือ 'apache2 -k restart' หรือไม่ หรือรีสตาร์ทระบบของคุณ?
blade19899

คำตอบ:


28

สิ่งนี้สามารถเกิดขึ้นได้เป็นครั้งคราวเมื่ออาปาเช่ปฏิเสธที่จะหยุดอย่างใดอย่างหนึ่งหรือมีกระบวนการซอมบี้กระบวนการผีดิบสำหรับอดีตคุณสามารถฆ่ากระบวนการทำงานด้วยsudo killall -9 apache2; อย่างไรก็ตามสำหรับหลังคุณจะต้องรอให้พวกเขาหายไป ในกรณีที่ Apache ไม่ต้องการหยุดสิ่งที่คุณต้องการทำจริงๆคือตรวจสอบสิ่งที่เกิดขึ้น การค้นหาว่าสิ่งที่เกิดขึ้นอาจเป็นเรื่องยาก

อินเทอร์แอคทีฟstraceของ id กระบวนการอาจให้เงื่อนงำว่าไซต์ใดบ้างที่กำลังทำงานและก่อให้เกิดปัญหา จากข้างบนps -Aคุณสามารถตรวจสอบกระบวนการแรกด้วย

strace -p 1663

สิ่งนี้จะแนบกับการติดตามสแต็กกระบวนการที่กำลังรันอยู่ซึ่งให้เอาต์พุตแบบสดของสิ่งที่เกิดขึ้น คุณสามารถทำได้ทุกเวลาCtrl + ได้C

ทรัพยากรเพิ่มเติมคือบันทึกข้อผิดพลาดหลักสำหรับ Apache ซึ่งสามารถพบได้ใน/var/log/apache2/error.logคุณจะต้องได้รับบันทึกที่ดีและอ่านรายละเอียด หากปัญหายังคงมีปัญหาอยู่

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

นี้คล้ายกับstraceจะทำงานในเรียลไทม์ สำหรับบรรทัด N บรรทัดสุดท้ายแทนที่-fด้วย-#ตำแหน่งที่#เป็นจำนวนบวกเช่น 50, 100, 282 เป็นต้น


7

ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ที่เหมาะสมในการหยุดบริการ

หากคุณทำงาน:

service apache2 stop

คุณจะไม่ได้รับข้อผิดพลาดใด ๆ เพียง:

* การหยุดเว็บเซิร์ฟเวอร์ apache2

ลอง:

sudo service apache2 stop      

เมื่อมีหน่วยความจำไม่เพียงพอหรือสลับเกือบเต็มสิ่งนี้จะล้มเหลว killall เป็นทางออกเดียวเท่านั้น
James Tan

3

ฉันก็มีปัญหาเดียวกันและลองทำสิ่งต่อไปนี้:

sudo apache2ctl stop

เพื่อหยุดบริการและ

sudo apache2ctl start

เพื่อเริ่มอีกครั้ง

มันทำงานได้สำหรับฉันข้อเสนอแนะใด ๆ ที่เป็นไปได้ยินดีต้อนรับ



0

กระบวนการสามารถถาม (โดยการส่งสัญญาณไปยังพวกเขา) เพื่อหยุด killคำสั่งเป็นวิธีที่จะทำอย่างนั้น หากคุณรู้ ID กระบวนการ (PID) ของกระบวนการก็สามารถถูกถามอย่างดีโดยการเรียกใช้คำสั่งด้านล่างใน terminal:

kill PID_OF_YOUR_PROCESS

ตัวอย่างข้างต้นส่ง PID สัญญาณ TERM เริ่มต้น (รหัส 15) คุณสามารถค้นหารหัสสัญญาณในหน้า man of kill (man kill )

เมื่อโปรแกรมไม่สนใจสัญญาณ TERM ที่ส่งไปพวกเขายังคงสามารถเพิ่มแรงกดดันได้อีกเล็กน้อยโดยการส่งสัญญาณ KILL (รหัส 9) สัญญาณนี้ใช้เป็นทางเลือกสุดท้ายเนื่องจากกระบวนการอาจไม่บันทึกข้อมูลที่ไม่ได้บันทึก

การระบุ-SIGNAL_CODEเป็นพารามิเตอร์แรกก่อน ID กระบวนการจะส่งสัญญาณเฉพาะกระบวนการ คุณสมบัติที่มีประโยชน์อีกประการของkillคำสั่งคือคุณสามารถระบุ PID เพิ่มเติมได้ในตัวอย่างต่อไปนี้:

kill -9 PID1 PID2 PID3 PID4

พยายามยุติกระบวนการ Apache โดยใช้kill -9บรรทัด พวกเขาควรหยุดจนกว่าจะมีบางสิ่งกีดขวางไม่ให้ทำเช่นนั้น


หากผู้อ่านไม่คุ้นเคยกับคำสั่ง 'kill' จะไม่มีโอกาสเลยที่พวกเขาจะรู้วิธีการหา PID ของกระบวนการ apache2
Max Barraclough

0

ผมมีปัญหาเหมือนกัน แต่คุณก็ไม่สามารถดำเนินการอย่างหนึ่งservice apache2 stopคำสั่ง - คุณต้องทำอย่างใดอย่างหนึ่งPERกระบวนการ จากนั้นคุณอาจต้องการเพิ่มsudoด้านหน้าในกรณีที่คุณเข้าสู่บัญชีคี่บางอย่างที่จำเป็นต้องใช้ดังนั้นหากคุณเห็น 9 กระบวนการทำงานให้ทำ 9sudo service apache2 stop

ทำงานได้ดีสำหรับฉัน


-2

หลังจากติดตั้ง nginx แล้ว apache ของฉันก็หยุดทำงานอย่างถูกต้อง ดูเหมือนว่าในบางกรณีอาปาเช่สับสนกับ nginx เพียงลบ nginx

sudo apt-get purge nginx nginx-common
sudo apt-get autoremove
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.