Bagaimana saya mendapatkan Apache untuk memulai saat bootime di Linux?

32

Saya telah menginstal Apache 2 dari sumber pada kotak Linux saya. apachectl -k startberfungsi dengan baik, tetapi bagaimana cara membuat Apache untuk memulai saat boot?

Ini adalah distribusi Red Hat Linux:

Linux <hostname> 2.6.9-55.ELsmp # 1 SMP Jumat 20 Apr 17:03:35 EDT 2007 i686 i686 i386 GNU / Linux

bersedih hati
sumber
1
Distribusi yang mana?
ayaz

Jawaban:

46

Anda ingin menambahkan skrip init ke level run yang sesuai. Skrip init biasanya /etc/init.d/apache2digunakan /etc/init.d/apache2 startuntuk menjalankannya secara manual .

Di Gentoo Anda akan menulis:

rc-update add apache2 default

Di Ubuntu / Debian ini berfungsi:

sudo update-rc.d apache2 defaults

Di Red Hat Linux / Fedora / CentOS sedikit googling menunjukkan ini:

chkconfig --add httpd

Ini sedikit berbeda dari distribusi ke distribusi, tetapi idenya biasanya sama. Pada dasarnya, semua perintah ini membuat tautan simbolis dari /etc/init.d/ke folder run-level yang sesuai di /etc/.

Evan Teran
sumber
1
Terima kasih atas jawabannya, itu membuat saya menunjuk ke arah yang benar. Saya merangkum apa yang saya lakukan di bawah ini.
berduka
Jika Anda telah membangun apache dari sumber maka tidak akan ada skrip init apa pun, bagian yang Anda bahas hanyalah konfigurasi sebagai layanan begitu Anda memiliki skrip init yang diatur dengan benar di /etc/init.d/ dan itulah tepatnya bukan t didokumentasikan dengan sangat baik untuk apache 2
Jaime Hablutzel
26

Inilah yang akhirnya berhasil untuk saya. Ini mengasumsikan Anda adalah pengguna root.

  1. vi /etc/init.d/apache2 (edit seperti yang ditunjukkan di bawah ini)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig --add apache2
  4. chkconfig --list apache2 (untuk memverifikasi bahwa itu berfungsi)

Isi dari /etc/init.d/apache2:

#! / bin / bash
#
# apache2 Skrip pembuka untuk Server HTTP Apache
#
# chkconfig: 3 85 15
# description: Apache adalah server World Wide Web. Ini digunakan untuk melayani \
# File HTML dan CGI.

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

Anda bisa mendapatkan runlevel dengan menjalankan / sbin / runlevel, yang dalam kasus saya adalah 3. Dan tentu saja Anda perlu memanggil versi apachectl Anda, yang dalam kasus saya adalah / usr / local / apache2 / bin / apachectl

Berkat yang berikut ini:

bersedih hati
sumber
Saya benar-benar benci menerima jawaban saya sendiri, tetapi itu yang berhasil.
bersedih hati
Ini persis apa yang saya butuhkan! (harus mengkompilasi ulang dan menginstal Apache 2.2.27 di / usr / local / apache2). Terima kasih banyak.
Christophe Muller
apakah baris ini "/ usr / local / apache2 / bin / apachectl $ @" benar-benar memulai httpd? Anda perlu mengeluarkan: sudo chkconfig apache2 start atau sudo chkconfig apache2 aktif?
olala
8

Periksa apakah Anda memiliki httpdskrip init di /etc/rc.ddirektori. Jika ya, maka Anda bisa menjalankan perintah berikut yang memungkinkan layanan httpd untuk memulai saat boot.

chkconfig --level 345 httpd on

Jika Anda tidak memiliki skrip init, maka cukup tambahkan /etc/rc.localfile dengan apachectl -k start(perintah untuk memulai Apache).

Viky
sumber
4

Seperti yang telah Anda instal oleh sumber tidak akan ada skrip init yang diinstal di direktori /etc/init.d/. Biner apachectl dirancang agar kompatibel dengan opsi skrip init standar sehingga Anda mungkin dapat dengan mudah menyinkronkannya daripada membuat skrip pembungkus (mis. Ln -s / usr / local / sbin / apachectl /etc/init.d/ apache)

Anda kemudian dapat mengikuti prosedur yang diuraikan dalam posting lain untuk menambahkan tautan untuk menjalankan skrip init di runlevel yang benar.

Kutipan: Dokumentasi Apache http://httpd.apache.org/docs/2.2/invoking.html

Mulai saat Boot

Jika Anda ingin server Anda terus berjalan setelah reboot sistem, Anda harus menambahkan panggilan ke apachectl ke file startup sistem Anda (biasanya rc.local atau file di direktori rc.N). Ini akan memulai Apache sebagai root. Sebelum melakukan ini, pastikan server Anda dikonfigurasi dengan benar untuk pembatasan keamanan dan akses.

Skrip apachectl dirancang untuk bertindak seperti skrip init SysV standar; dapat mengambil argumen mulai, restart, dan berhenti dan menerjemahkannya ke sinyal yang sesuai untuk httpd. Jadi, Anda seringkali dapat dengan mudah menautkan apachectl ke direktori init yang sesuai. Tetapi pastikan untuk memeriksa persyaratan yang tepat dari sistem Anda.

Russell Heilling
sumber
Terima kasih atas jawabannya, itu membuat saya menunjuk ke arah yang benar. Saya merangkum apa yang saya lakukan di bawah ini.
berduka
1

chkconfig --levels 345 httpd

akan memulai httpd di runlevel 3,4,5.

chkconfig --list akan menampilkan semua layanan dan runlevel startup mereka saat ini. 345 adalah tipikal untuk layanan jaringan.

Elint
sumber
1
Ini menghasilkan kesalahan berikut dengan saya di CentOS 6: "hanya satu runlevel yang dapat ditentukan untuk permintaan chkconfig". Namun, menambahkan "pada" ke akhir perintah ("chkconfig --levels 345 httpd on") bekerja seperti pesona.
akame
1

Di Red Hat Linux ada utilitas berguna yang disebut ntsysv yang memungkinkan Anda memilih layanan mana yang ingin Anda mulai di level run saat ini. Anda memanggil juga menentukan level run mana yang ingin Anda edit ketika Anda mulai menggunakan utilitas --level.

Gulir ke bawah ke httpd dan tekan Spacesehingga bintang muncul di kotak sebelah kiri. Lalu Tabke OK. Tekan Returnuntuk menyimpan dan kembali ke shell.

Saya telah menemukan bahwa itu menginstal cukup banyak secara default. Saya tidak pernah berada di posisi yang tidak diinstal.

Anda perlu menginstal layanan terlebih dahulu dengan menyalin skrip layanan ke /etc/init.d lalu menjalankan:

chkconfig --add <script name>
Garry Harthill
sumber
1

Itu tergantung pada rasa Linux Anda. Dengan asumsi file /etc/init.d/apache2 telah dibuat, coba:

chkconfig -a apache2

atau

update-rc.d apache2 defaults

Salah satunya harus bekerja.

Neobyte
sumber
1
Jawaban chkconfig adalah untuk sistem Red-Hat like (yaitu CentOS) dan update-rc.d adalah untuk sistem seperti Debian (yaitu Ubuntu)
Kyle Brandt