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


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/.


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:


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).


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.


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.


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>

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.


1
Jawaban chkconfig adalah untuk sistem Red-Hat like (yaitu CentOS) dan update-rc.d adalah untuk sistem seperti Debian (yaitu Ubuntu)
Kyle Brandt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.