เซิร์ฟเวอร์ Apache ไม่เริ่มทำงานโดยอัตโนมัติ


11

ฉันติดตั้ง Apache เป็นเวลานานเนื่องจากเป็นส่วนหนึ่งของการตั้งค่าสภาพแวดล้อมการพัฒนาบนแล็ปท็อปของฉัน

อย่างไรก็ตามเนื่องจากฉันหยุดมันไปหลายเดือนมันจึงไม่เริ่มโดยอัตโนมัติเมื่อบูต ฉันมีปัญหานี้บนแล็ปท็อปที่บ้านและบนแล็ปท็อปที่ทำงาน

ฉันทั้งสองกรณีฉันติดตั้ง Apache ใน Ubuntu 10.10 หลายเดือนก่อนใช้มันเป็นเวลาหลายสัปดาห์โดยไม่มีข้อผิดพลาด แต่แล้ววันหนึ่งฉันก็หยุดมันและตอนนี้มันก็ไม่เริ่มโดยอัตโนมัติอีกต่อไป ฉันพยายามเรียกใช้อัปเดต rc ด้วยตนเอง แต่ได้รับการบอกว่าสคริปต์ init มีการใช้งานแล้ว

อย่างไรก็ตามการเริ่ม / รีสตาร์ทด้วยตนเองด้วย

sudo service apache2 start/restart

ทำงานได้ดี ในทั้งสองกรณีฉันปล่อยไว้จนกว่าจะถึงการอัพเกรดเป็น 11.04 เพราะฉันหวังว่าเวอร์ชั่นใหม่จะได้รับการแก้ไข แต่มันไม่ใช่! ฉันจะขอบคุณถ้ามีคนบอกฉันได้ว่าจะให้ Apache เริ่มทำงานอัตโนมัติอีกครั้งได้อย่างไร

คำตอบ:


10

พยายามวิ่ง

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

ในฐานะที่เป็นราก

คุณอาจสนใจที่จะอ่าน

man update-rc.d

1
ขอบคุณมากฉันรันคำสั่ง (ไม่มีรายการ runlevels เพียงค่าเริ่มต้น) และดูเหมือนว่าจะทำงาน คุณรู้ไหมว่าทำไมมันถึงหยุดทำงาน? ฉันไม่รอบไม่ไวโอลินกับสคริปต์ init ที่ฉันคิดว่าฉันก็หยุด Apache จากบรรทัดคำสั่ง - แต่ผมมีความตั้งใจที่จะหยุดมันไม่ถาวร :-)
Carsten Agger

ฉันไม่มีความคิดเห็นใด ๆ ว่าทำไมมันจึงหยุดทำงาน :) บางทีหลังจากอัพเดตบางอย่างเริ่มทำงานไม่ถูกต้อง
สนใจ

ขอบคุณ แต่มันไม่ช่วย ไม่ว่าฉันจะเรียกใช้การเปิดใช้งาน update-rc.d apache2 ได้อย่างไร apache จะหยุดทำงานโดยอัตโนมัติอีกครั้ง ฉันต้องเริ่มด้วยตนเองเสมอ ดูเหมือนจะไม่มีปัญหาจริงเนื่องจากมันจะเริ่มต้นอย่างถูกต้องเสมอเมื่อฉันทำด้วยตนเอง
Carsten Agger

9

ฉันกำลังเพิ่มคำตอบนี้ตามปัญหาล่าสุดที่ฉันพบด้วยอาการเดียวกัน

ก่อนข้อมูลพื้นหลังบางส่วน:

  • Ubuntu ใช้สคริปต์ใน/etc/init.d/โฟลเดอร์เพื่อเริ่ม / หยุดบริการ
  • Ubuntu ใช้ symlink กับ/etc/init.d/สคริปต์เหล่านั้นซึ่งจัดเก็บไว้ใน/etc/rc#.d/โฟลเดอร์เพื่อเริ่ม / หยุดบริการตาม "runlevel"
  • Symlinks ที่ขึ้นต้นด้วย "S" ระบุว่าควรเริ่มบริการ
  • Symlinks ที่ขึ้นต้นด้วย "K" ระบุว่าควรหยุดบริการ (ถูกฆ่า)
  • Runlevel 1 เรียกใช้งานสคริปต์ที่เชื่อมโยง/etc/rc1.d/กันใช้ runlevel 2 /etc/rc2.d/และอื่น ๆ
  • runlevel เริ่มต้นสำหรับ Ubuntu คือ 2
  • การติดตั้ง Apache ทำงานเป็นหลักsudo update-rc.d apache2 defaultsซึ่งสร้าง symlink ที่เหมาะสมใน/etc/rc#.d/โฟลเดอร์

ดังนั้นจึงดูเหมือนว่าในเซิร์ฟเวอร์ของฉันมีบางสิ่งบางอย่างหรือบางคนวิ่งไปที่จุดหนึ่งsudo update-rc.d apache2 disableซึ่งลบ symlinks "S" ทั้งหมดและแทนที่ด้วย "K" symlink ดังนั้นการฆ่าหรือไม่เริ่มต้น Apache เมื่อเริ่มต้น runlevels ใด ๆ

โซลูชันของฉันเป็นเพียงการเปิดใช้งาน Apache อีกครั้ง:

sudo update-rc.d apache2 enable

ตอนนี้ Apache เริ่ม / หยุดตามที่คาดไว้เมื่อเริ่มต้นหรือเปลี่ยน runlevels

หมายเหตุ:

เป็นที่น่าสังเกตว่าการรันsudo update-rc.d apache2 defaultsใหม่อีกครั้งนั้นไม่เพียงพอเพราะเห็นว่ามี symlink อยู่และคิดว่ามันเป็นสิ่งที่ต้องการ มันตอบสนองด้วย:

System start/stop links for /etc/init.d/apache2 already exist.

1
ขอบคุณ! สิ่งนี้มีประโยชน์มากในการแก้ไขปัญหาการกำหนดค่าของฉัน
reor

1
ฉันมีปัญหานี้ แต่วิธีนี้ไม่ได้ผลอย่างน่าประหลาดใจ เมื่อฉันเรียกใช้sudo update-rc.d apache2 enable defaultsมันจะลบสิ่งที่ฉันมีแล้วทำให้มันกลับมาทันที ฉันมีK09apache2ใน rc0, 1 และ 6 และฉันมีS91apache2ใน rc2, rc3, rc4, rc5 service apache2 startทำงานได้ดี แต่ฉันต้องทำทุกครั้งหลังจากรีสตาร์ทเพราะจะไม่เริ่มต้นโดยอัตโนมัติ ในทางกลับกัน mysql จะเริ่มต้นได้ดีเสมอ
Buttle Butkus

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

3

ในกรณีนี้ฉันพบว่าทำไม Apache ไม่เริ่มทำงาน ฉันไม่พบร่องรอยของสิ่งนี้ในบันทึกการเริ่มต้นเฉพาะในผลลัพธ์ที่พิมพ์ไปยังหน้าจอเมื่อบูตเครื่อง

แต่ที่นี่คุณไป: บรรทัดสุดท้ายในสคริปต์/etc/apache2/apache2.confล้มเหลว

ทำไม?

มันบอกว่า:

Include sites-enabled/

อย่างไรก็ตามสองเว็บไซต์ที่ฉันตั้งค่านั้นอยู่ในโฮมไดเร็กตอรี่ของฉันเอง - ซึ่งถูกเข้ารหัส!

ดังนั้นในการบูท (ระหว่างการเริ่มต้นของ Apache) เว็บไซต์เหล่านี้ไม่มีอยู่และ Apache ล้มเหลวและปฏิเสธที่จะทำงาน

สารละลาย?

ฉันได้สร้างสคริปต์เล็ก ๆ ชื่อว่า "disable_sites" และเชื่อมโยงเข้ากับมัน/etc/rc0.dและ/etc/rc6.d(ปิดและรีบูต):

#!/bin/bash

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

exit 0

ฉันได้สร้างสคริปต์เพื่อเปิดใช้งานไซต์เมื่อใดก็ตามที่ฉันเข้าสู่ระบบและเพิ่มเป็นโปรแกรมเริ่มต้นในการตั้งค่าระบบของฉัน ดังนั้นตอนนี้มันใช้งานได้!

ดังนั้นฉันคิดว่าบทเรียนที่นี่คือเมื่อ Apache ไม่สามารถโหลดได้อย่างลึกลับในระหว่างการบูตเครื่องและคุณไม่พบข้อผิดพลาดใด ๆ ในบันทึกหรือเมื่อเริ่มต้นเซิร์ฟเวอร์ด้วยตนเองตรวจสอบว่าไดเรกทอรีทั้งหมดที่ต้องการมีอยู่หรือไม่ สิ่งนี้อาจแก้ไขได้ด้วยวิธีอื่น


ฉันประหลาดใจที่คุณไม่พบข้อผิดพลาดใด ๆ ในบันทึก ฉันเคยพบว่าข้อผิดพลาดในการเริ่มต้นของ Apache บางอย่างไม่ได้อยู่ในล็อกไฟล์ที่ฉันคาดไว้ แต่ในล็อกไฟล์สำหรับโฮสต์เสมือนของฉัน เป็นไปได้ไหม?
Marius Gedminas

apachectl configtestจะแจ้งให้คุณทราบเกี่ยวกับการขาดสิทธิ์ในการเข้าถึงไฟล์ในขณะที่ทำงานเป็น daemon
Anuga

1

สำหรับคนอื่น ๆ ที่กำลังมองหา (googling) สำหรับปัญหานี้ตรวจสอบว่าถ้าคุณเรียกใช้:

chkconfig |grep httpd

คุณได้รับ

httpd 0: off 1: off 2: on 3: on 4: on 5: on 6: off

อื่นทำ:

chkconfig httpd on

(ขออภัยใน Ubuntu ที่เทียบเท่า chkconfig คือ update-rc.d ดูChkconfig ทางเลือกสำหรับ Ubuntu Server? )


0

ฉันมีปัญหาเดียวกันและฉันใช้งาน Ubuntu 14 ในการตั้งค่า Vagrant ในพื้นที่ ฉันลบ/etc/apache2/sites-enabledไดเรกทอรีและเพิ่มลิงค์ไปยังโฮมไดเร็กตอรี่ของฉันซึ่งแน่นอนว่าติดตั้งอยู่กับไดรฟ์ในเครื่องของฉันตาม Vagrant configs

ปรากฎว่า apache ไม่เห็นไดเรกทอรีเพราะทรัพยากรยังไม่ถูกเมานท์ ฉันเขียนบทบัญญัติของฉันใน Vagrant อีกครั้งเพื่อคัดลอกsites-enabledไดเรกทอรีแทนที่จะเพิ่ม symlink

ฉันยังทำsudo update-rc.d apache2 enableตามที่แนะนำโดยKarl Wilburเพื่อให้แน่ใจว่า apache init เปิดใช้งานอยู่

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