ฉันจะให้ Apache เริ่มการทำงานเมื่อบูทบน Linux ได้อย่างไร


32

ฉันติดตั้ง Apache 2 จากซอร์สบนกล่อง Linux ของฉันแล้ว apachectl -k startทำงานได้ดี แต่ฉันจะให้ Apache เริ่มต้นตอนบูทได้อย่างไร

นี่คือการแจกจ่าย Red Hat Linux:

Linux <hostname> 2.6.9-55.ELsmp # 1 SMP ศุกร์ 20 เม.ย. 17:03:35 EDT 2007 i686 i686 i386 GNU / Linux


1
การกระจายแบบไหน
ayaz

คำตอบ:


46

คุณต้องการเพิ่มสคริปต์เริ่มต้นให้กับระดับการทำงานที่เหมาะสม โดยทั่วไปแล้วสคริปต์ init จะเป็น/etc/init.d/apache2ตำแหน่งที่คุณสามารถเรียกใช้/etc/init.d/apache2 startเพื่อเริ่มต้นด้วยตนเอง

ใน Gentoo คุณจะเขียน:

rc-update add apache2 default

บน Ubuntu / Debian สามารถใช้งานได้:

sudo update-rc.d apache2 defaults

บน Red Hat Linux / Fedora / CentOS googling เล็กน้อยจะแสดงสิ่งนี้:

chkconfig --add httpd

มันแตกต่างกันเล็กน้อยจากการกระจายการกระจาย แต่ความคิดมักจะเหมือนกัน โดยทั่วไปคำสั่งทั้งหมดเหล่านี้ทำให้การเชื่อมโยงสัญลักษณ์จากไปยังโฟลเดอร์ทำงานในระดับที่เหมาะสม/etc/init.d//etc/


1
ขอบคุณสำหรับคำตอบมันทำให้ฉันชี้ไปในทิศทางที่ถูกต้อง ฉันสรุปสิ่งที่ฉันทำด้านล่าง
เสียใจ

หากคุณสร้าง apache จากซอร์สจะไม่มีสคริปต์เริ่มต้นส่วนที่คุณกล่าวถึงเป็นเพียงการกำหนดค่าเป็นบริการเมื่อคุณตั้งค่าสคริปต์เริ่มต้นอย่างถูกต้องใน /etc/init.d/ และนั่นคือสิ่งที่ไม่ถูกต้อง ' เอกสารที่ดีจริงๆสำหรับ apache 2
Jaime Hablutzel

26

นี่คือสิ่งที่ได้ผลในที่สุดสำหรับฉัน สิ่งนี้ถือว่าคุณเป็นผู้ใช้รูท

  1. vi /etc/init.d/apache2 (แก้ไขตามที่แสดงด้านล่าง)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig - เพิ่ม apache2
  4. chkconfig - รายการ apache2 (เพื่อตรวจสอบว่ามันทำงาน)

เนื้อหาของ /etc/init.d/apache2:

#! / bin / ทุบตี
#
# apache2 สคริปต์เริ่มต้นสำหรับเซิร์ฟเวอร์ Apache HTTP
#
# chkconfig: 3 85 15
# description: Apache เป็นเซิร์ฟเวอร์เวิลด์ไวด์เว็บ มันถูกใช้เพื่อให้บริการ
# ไฟล์ HTML และ CGI

/ usr / local / apache2 / bin / apachectl $ @

คุณสามารถรับ runlevel ได้ด้วยการรัน / sbin / runlevel ซึ่งในกรณีของฉันคือ 3 และแน่นอนคุณต้องเรียกเวอร์ชันของ apachectl ซึ่งในกรณีของฉันคือ / usr / local / apache2 / bin / apachectl

ขอบคุณต่อไปนี้:

  • คำตอบจากEvan Teran +1 สำหรับความช่วยเหลือ
  • คำตอบจากRussell Heilling + 1 สำหรับความช่วยเหลือ
  • ผู้ชาย chkconfig
  • ลิงค์นี้มาจาก sysdigg ซึ่งมีข้อมูลเกี่ยวกับ runlevel

ฉันเกลียดที่จะยอมรับคำตอบของฉันเอง แต่มันก็เป็นคำตอบที่ใช้ได้
เสียใจ

นี่คือสิ่งที่ฉันต้องการ! (ต้องคอมไพล์ใหม่และติดตั้ง Apache 2.2.27 ใน / usr / local / apache2) ขอบคุณมาก.
Christophe Muller

บรรทัดนี้ "/ usr / local / apache2 / bin / apachectl $ @" เริ่มจาก httpd จริงหรือไม่ คุณต้องการออกหรือไม่: sudo chkconfig apache2 start หรือ sudo chkconfig apache2 on?
olala

8

ตรวจสอบว่าคุณมีhttpdสคริปต์เริ่มต้นใน/etc/rc.dไดเรกทอรีหรือไม่ ถ้าใช่คุณสามารถเรียกใช้คำสั่งต่อไปนี้ซึ่งจะช่วยให้บริการhttpdเริ่มต้นในเวลาบูต

chkconfig --level 345 httpd on

หากคุณไม่มีสคริปต์เริ่มต้นให้ต่อท้าย/etc/rc.localไฟล์ด้วยapachectl -k start(คำสั่งเพื่อเริ่ม Apache)


4

เมื่อคุณติดตั้งโดยแหล่งที่มาจะไม่มีสคริปต์เริ่มต้นติดตั้งในไดเรกทอรี /etc/init.d/ apachectl ไบนารีได้รับการออกแบบให้เข้ากันได้กับตัวเลือกสคริปต์ init มาตรฐานดังนั้นคุณอาจจะสามารถเชื่อมโยงกับมันแทนที่จะสร้างสคริปต์ตัวตัด (เช่น ln -s / usr / local / sbin / apachectl /etc/init.d/ Apache)

จากนั้นคุณสามารถทำตามขั้นตอนที่อธิบายไว้ในโพสต์อื่นเพื่อเพิ่มลิงค์เพื่อเรียกใช้สคริปต์เริ่มต้นที่ runlevels ที่ถูกต้อง

การอ้างอิง: เอกสารของ Apache http://httpd.apache.org/docs/2.2/invoking.html

เริ่มต้นที่ Boot-Time

หากคุณต้องการให้เซิร์ฟเวอร์ของคุณทำงานต่อหลังจากรีบูตระบบคุณควรเพิ่มการเรียก apachectl ให้กับไฟล์เริ่มต้นระบบของคุณ (โดยทั่วไปคือ rc.local หรือไฟล์ในไดเรกทอรี rc.N) นี่จะเป็นการเริ่ม Apache เป็นรูท ก่อนดำเนินการให้แน่ใจว่าเซิร์ฟเวอร์ของคุณได้รับการกำหนดค่าอย่างเหมาะสมเพื่อความปลอดภัยและการ จำกัด การเข้าถึง

สคริปต์ apachectl ได้รับการออกแบบให้ทำหน้าที่เหมือนสคริปต์มาตรฐาน SysV init สามารถใช้อาร์กิวเมนต์เริ่มต้นรีสตาร์ทและหยุดและแปลเป็นสัญญาณที่เหมาะสมไปยัง httpd ดังนั้นคุณสามารถลิงก์ apachectl ไปยังไดเรกทอรีเริ่มต้นที่เหมาะสมได้ง่ายๆ แต่อย่าลืมตรวจสอบข้อกำหนดที่แน่นอนของระบบของคุณ


ขอบคุณสำหรับคำตอบมันทำให้ฉันชี้ไปในทิศทางที่ถูกต้อง ฉันสรุปสิ่งที่ฉันทำด้านล่าง
เสียใจ

1

chkconfig - ระดับ 345 httpd

จะเริ่มต้น httpd ใน runlevels 3,4,5

chkconfig - รายการจะแสดงบริการทั้งหมดและ runlevels เริ่มต้นปัจจุบันของพวกเขา 345 เป็นเรื่องปกติสำหรับบริการเครือข่าย


1
สิ่งนี้สร้างข้อผิดพลาดต่อไปนี้กับฉันใน CentOS 6: "อาจมีการระบุ runlevel เพียงรายการเดียวสำหรับแบบสอบถาม chkconfig" อย่างไรก็ตามการเพิ่ม "กับ" ในตอนท้ายของคำสั่ง ("chkconfig --levels 345 httpd on") ทำงานเหมือนมีเสน่ห์
akame

1

บน Red Hat Linux มียูทิลิตี้ที่มีประโยชน์ที่เรียกว่า ntsysv ซึ่งให้คุณเลือกบริการที่คุณต้องการเริ่มในระดับการทำงานปัจจุบันของคุณ --levelคุณเรียกยังระบุระดับการทำงานคุณต้องการที่จะแก้ไขเมื่อคุณเริ่มใช้ยูทิลิตี้

เลื่อนลงไปที่ httpd แล้วกดSpaceเพื่อให้ดาวปรากฏในช่องด้านซ้าย จากนั้นTabตกลง กดReturnเพื่อบันทึกและกลับสู่เชลล์

ฉันพบว่ามันติดตั้งค่อนข้างเป็นค่าเริ่มต้น ฉันไม่เคยอยู่ในตำแหน่งที่ไม่ได้ติดตั้ง

คุณจะต้องติดตั้งบริการก่อนโดยการคัดลอกสคริปต์บริการลงใน /etc/init.d จากนั้นเรียกใช้:

chkconfig --add <script name>

1

ขึ้นอยู่กับรสชาติของ Linux สมมติว่าไฟล์ /etc/init.d/apache2 ถูกสร้างขึ้นให้ลอง:

chkconfig -a apache2

หรือ

update-rc.d apache2 defaults

หนึ่งในนั้นควรทำงาน


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