ฉันได้รับข้อผิดพลาดนี้ในการติดตั้งใหม่เมื่อเริ่ม apache2 Ubuntu 12.10
มันเป็นข้อผิดพลาดใน apache2 มันแขวนอยู่ด้านหลัง นี่คือคำแนะนำของฉันถึงจุดที่อาจมีข้อบกพร่องในซอฟต์แวร์
นี่คือข้อผิดพลาดที่ฉันได้รับ:
el@titan:~$ sudo service apache2 start
* Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
[fail]
ที่อยู่ในการใช้งานอยู่แล้ว? สิ่งที่สามารถใช้งานได้? ลองดูสิ:
el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:# supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf: Listen 443
/etc/apache2/ports.conf: Listen 443
นั่นหมายความว่า apache2 ป้องกันไม่ให้ apache2 เริ่มทำงาน แปลกประหลาด สิ่งนี้จะยืนยัน:
el@titan:~$ ps -ef | grep apache2
root 1146 954 0 15:51 ? 00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root 1172 1146 0 15:51 ? 00:00:00 /bin/sh /usr/sbin/apache2ctl start
root 1181 1172 0 15:51 ? 00:00:00 /usr/sbin/apache2 -k start
root 1193 1181 0 15:51 ? 00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el 5439 5326 0 16:23 pts/2 00:00:00 grep --color=auto apache2
ใช่ในกรณีนี้ apache2 กำลังทำงานอยู่ฉันพยายามเริ่ม apache2 เป็นครั้งที่สองบนพอร์ตเดียวกัน
สิ่งที่ทำให้ฉันสับสนคือservice
รายงานว่า apache2 ไม่ทำงาน:
el@titan:~$ sudo service apache2 status
Apache2 is NOT running.
และเมื่อคุณสอบถาม apache2ctl สำหรับสถานะของมันแฮงค์
root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.
ดังนั้น Ubuntu ดูเหมือนจะมีปัญหาในการจัดการ apache2 ในการบูท เวลาที่จะหยุด apache2:
root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running
เบาะแสใหญ่! คุณพยายามหยุด apache2 และสูญเสียรหัสกระบวนการ! ดังนั้น Ubuntu จึงไม่สามารถหยุด apache2 ได้เพราะมันไม่รู้ว่าอยู่ที่ไหน!
คุณจะคิดว่าการรีบูตจะแก้ไขได้ แต่ก็ไม่ได้เพราะ apache2 เริ่มต้นในการบูตและแฮงค์ กระบวนการบูตปกติสำหรับ apache2 ไม่ทำงาน
ดังนั้นจะแก้ไขได้อย่างไร
ฉันสามารถแก้ไขได้โดยการวิเคราะห์ps
เอาต์พุตคำสั่ง ขอให้สังเกตว่าps
คำสั่งบอกเราว่ากระบวนการนั้นเริ่มต้นโดย "/etc/rc2.d/S91apache2 start"
นั่นคือโปรแกรมละเมิดที่ต้องการการเตะอย่างรวดเร็ว
/etc/rc2.d/S91apache2
เป็นลิงก์สัญลักษณ์ที่ใช้ในการเริ่ม apache2 สำหรับคุณเมื่อคอมพิวเตอร์เริ่มทำงาน ด้วยเหตุผลบางอย่างดูเหมือนว่าจะเริ่ม apache2 แล้วแฮงค์ ดังนั้นเราจะต้องบอกให้ทำอย่างนั้นไม่ได้
/etc/rc2.d/S91apache2
เพื่อไปดูที่ว่า
el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx 1 root root 17 Nov 7 21:45 S91apache2 -> ../init.d/apache2*
มันเป็นลิงค์สัญลักษณ์ที่เราไม่ต้องการให้อยู่ตรงนั้น ทำเช่นนี้เพื่อป้องกัน apache2 จากการเริ่มต้นในการบูต:
root@titan:~# sudo update-rc.d -f apache2 remove
Removing any system startup links for /etc/init.d/apache2 ...
/etc/rc0.d/K09apache2
/etc/rc1.d/K09apache2
/etc/rc2.d/S91apache2
/etc/rc3.d/S91apache2
/etc/rc4.d/S91apache2
/etc/rc5.d/S91apache2
/etc/rc6.d/K09apache2
รีบูทคอมพิวเตอร์เพื่อให้แน่ใจว่า apache2 ไม่เริ่มทำงานและหยุดทำงาน OK ดี. ตอนนี้คุณสามารถใส่ apache2 กลับมาเหมือนเดิม แต่นั่นจะทำให้มันล้มเหลวอีกครั้ง
root@titan:~$ sudo update-rc.d apache2 defaults //(don't do this)
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K20apache2 -> ../init.d/apache2
/etc/rc1.d/K20apache2 -> ../init.d/apache2
/etc/rc6.d/K20apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache2
ให้เริ่มต้น apache2 ดังนี้:
sudo service apache2 start
และ apache2 จะสำรองและแสดงหน้าอีกครั้ง ดูเหมือนว่าจะมีข้อบกพร่องที่ร้ายแรงด้วย apache2 / Ubuntu 12.10 ที่ทำให้ apache2 เริ่มต้นและหยุดทำงาน นี่เป็นวิธีแก้ปัญหาฉันคิดว่าการแก้ไขคือรับ apache2 และ Ubuntu รุ่นใหม่กว่าและหวังว่าจะดีที่สุด