Làm cách nào để Apache khởi động khi khởi động trên Linux?


32

Tôi đã cài đặt Apache 2 từ nguồn trên hộp Linux của mình. apachectl -k startchỉ hoạt động tốt, nhưng làm cách nào để Apache khởi động khi khởi động?

Đây là bản phân phối Red Hat Linux:

Linux <tên máy chủ> 2.6.9-55.ELsmp # 1 SMP Thứ Sáu ngày 20 tháng 4 17:03:35 EDT 2007 i686 i686 i386 GNU / Linux


1
Phân phối nào?
ayaz

Câu trả lời:


46

Bạn muốn thêm tập lệnh init của nó vào mức chạy thích hợp. Tập lệnh init thường là /etc/init.d/apache2nơi bạn có thể tự chạy /etc/init.d/apache2 startđể khởi động nó.

Trên Gentoo bạn sẽ viết:

rc-update add apache2 default

Trên Ubuntu / Debian, nó hoạt động:

sudo update-rc.d apache2 defaults

Trên Red Hat Linux / Fedora / CentOS, một chút googling cho thấy điều này:

chkconfig --add httpd

Nó thay đổi một chút từ phân phối đến phân phối, nhưng ý tưởng thường giống nhau. Về cơ bản, tất cả các lệnh này tạo một liên kết tượng trưng từ /etc/init.d/đến thư mục mức chạy thích hợp trong /etc/.


1
Cảm ơn câu trả lời đã giúp tôi chỉ đúng hướng. Tôi tóm tắt những gì tôi đã làm dưới đây.
đau buồn

Nếu bạn đã xây dựng apache từ nguồn thì wont sẽ là bất kỳ tập lệnh init nào, phần bạn trình bày chỉ là cấu hình như một dịch vụ khi bạn có tập lệnh init được thiết lập chính xác trong /etc/init.d/ và đó chính xác là những gì không phải là ' Tài liệu thực sự tốt cho apache 2
Jaime Hablutzel

26

Đây là những gì cuối cùng đã làm việc cho tôi. Điều này giả định rằng bạn là người dùng root.

  1. vi /etc/init.d/apache2 (chỉnh sửa nó như hiển thị bên dưới)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig --add apache2
  4. chkconfig --list apache2 (để xác minh rằng nó đã hoạt động)

Nội dung của /etc/init.d/apache2:

#! / bin / bash
#
# apache2 Kịch bản khởi động cho Máy chủ HTTP Apache
#
# chkconfig: 3 85 15
# mô tả: Apache là một máy chủ World Wide Web. Nó được sử dụng để phục vụ \
# Tệp HTML và CGI.

/ usr / địa phương / apache2 / bin / apachectl $ @

Bạn có thể lấy runlevel bằng cách chạy / sbin / runlevel, trong trường hợp của tôi là 3. Và tất nhiên bạn cần gọi phiên bản apachectl của mình, trong trường hợp của tôi là / usr / local / apache2 / bin / apachectl

Nhờ những điều sau:


Tôi thực sự ghét phải chấp nhận câu trả lời của riêng tôi, nhưng đó là một trong những hoạt động.
đau buồn

Đây chính xác là những gì tôi cần! (phải biên dịch lại và cài đặt 2.2.27 Apache trong / usr / local / apache2). Cảm ơn rất nhiều.
Barshe Muller

dòng này "/ usr / local / apache2 / bin / apachectl $ @" có thực sự bắt đầu httpd không? Bạn cần phát hành: sudo chkconfig apache2 start hay sudo chkconfig apache2 trên?
olala

8

Kiểm tra nếu bạn có httpdtập lệnh init trong /etc/rc.dthư mục. Nếu có, thì bạn chỉ có thể chạy lệnh sau cho phép dịch vụ httpd bắt đầu khi khởi động.

chkconfig --level 345 httpd on

Nếu bạn không có tập lệnh init, thì chỉ cần nối thêm /etc/rc.localtệp với apachectl -k start(lệnh để khởi động Apache).


4

Vì bạn đã cài đặt theo nguồn nên sẽ không có tập lệnh init được cài đặt trong thư mục /etc/init.d/. Nhị phân apachectl được thiết kế để tương thích với các tùy chọn tập lệnh init tiêu chuẩn, do đó bạn có thể chỉ cần liên kết với nó thay vì tạo tập lệnh bao bọc (ví dụ: ln -s / usr / local / sbin / apachectl /etc/init.d/ xin lỗi)

Sau đó, bạn có thể làm theo các quy trình được nêu trong các bài đăng khác để thêm liên kết để gọi tập lệnh init tại các đường dẫn chính xác.

Trích dẫn: Tài liệu Apache http://httpd.apache.org/docs/2.2/invoking.html

Bắt đầu từ lúc khởi động

Nếu bạn muốn máy chủ của mình tiếp tục chạy sau khi khởi động lại hệ thống, bạn nên thêm một cuộc gọi đến apachectl vào các tệp khởi động hệ thống của bạn (thường là RC.local hoặc một tệp trong thư mục RC.N). Điều này sẽ bắt đầu Apache với quyền root. Trước khi làm điều này đảm bảo rằng máy chủ của bạn được cấu hình đúng cho các hạn chế về bảo mật và truy cập.

Kịch bản apachectl được thiết kế để hoạt động như một tập lệnh init SysV tiêu chuẩn; nó có thể đưa các đối số bắt đầu, khởi động lại và dừng và dịch chúng thành các tín hiệu thích hợp thành httpd. Vì vậy, bạn thường có thể chỉ cần liên kết apachectl vào thư mục init thích hợp. Nhưng hãy chắc chắn kiểm tra các yêu cầu chính xác của hệ thống của bạn.


Cảm ơn câu trả lời đã giúp tôi chỉ đúng hướng. Tôi tóm tắt những gì tôi đã làm dưới đây.
đau buồn

1

chkconfig - giảm 345 httpd

sẽ bắt đầu httpd trong runlevels 3,4,5.

chkconfig --list sẽ hiển thị tất cả các dịch vụ và các chương trình khởi động hiện tại của chúng. 345 là điển hình cho một dịch vụ mạng.


1
Điều này tạo ra lỗi sau với tôi trên CentOS 6: "chỉ một runlevel có thể được chỉ định cho truy vấn chkconfig". Tuy nhiên, việc thêm "bật" vào cuối lệnh ("chkconfig --levels 345 httpd on") hoạt động như một lá bùa.
akame

1

Trên Red Hat Linux, có một tiện ích hữu ích gọi là ntsysv cho phép bạn chọn dịch vụ nào bạn muốn bắt đầu ở cấp độ chạy hiện tại của mình. Bạn gọi cũng chỉ định mức chạy nào bạn muốn chỉnh sửa khi bạn khởi động tiện ích --level.

Cuộn xuống httpd và nhấn Spaceđể một ngôi sao xuất hiện trong hộp bên trái. Sau đó Tabđể OK. Nhấn Returnđể lưu và trở về vỏ.

Tôi đã thấy rằng nó cài đặt khá nhiều theo mặc định. Tôi chưa bao giờ ở vị trí mà nó chưa được cài đặt.

Bạn sẽ cần cài đặt dịch vụ trước bằng cách sao chép tập lệnh dịch vụ vào /etc/init.d sau đó chạy:

chkconfig --add <script name>

1

Nó phụ thuộc vào hương vị Linux của bạn. Giả sử tập tin /etc/init.d/apache2 đã được tạo, hãy thử:

chkconfig -a apache2

hoặc là

update-rc.d apache2 defaults

Một trong số họ nên làm việc.


1
Câu trả lời chkconfig dành cho các hệ thống giống như Red-Hat (ví dụ như CentOS) và update-rc.d dành cho các hệ thống giống như Debian (ví dụ Ubuntu)
Kyle Brandt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.