Как мне запустить 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
Какой дистрибутив?
Аяз

Ответы:

46

Вы хотите добавить его скрипт инициализации на соответствующий уровень выполнения. Сценарий инициализации обычно находится /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 небольшое прибегание к поиску показывает следующее:

chkconfig --add httpd

Это немного варьируется от распределения к распространению, но идея обычно та же самая. По сути, все эти команды создают символическую ссылку /etc/init.d/на соответствующую папку уровня выполнения в /etc/.

Эван Теран
источник
1
Спасибо за ответ, он указал мне правильное направление. Я суммировал то, что я сделал ниже.
скорби
Если вы собрали apache из исходного кода, сценария инициализации не будет, то часть, которую вы рассмотрели, - это только конфигурация как служба, если у вас правильно настроен сценарий инициализации в /etc/init.d/, и это именно то, чего не требуется ». действительно хорошо документировано для Apache 2
Хайме Хаблутцель
26

Вот что наконец-то сработало для меня. Это предполагает, что вы являетесь пользователем root.

  1. vi /etc/init.d/apache2 (отредактируйте его, как показано ниже)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig --add apache2
  4. chkconfig --list apache2 (чтобы убедиться, что это работает)

Содержимое /etc/init.d/apache2:

#! / Bin / Баш
#
# apache2 Скрипт запуска для HTTP-сервера Apache
#
# chkconfig: 3 85 15
# описание: Apache - это сервер World Wide Web. Используется для подачи \
# HTML-файлы и CGI.

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

Вы можете получить уровень запуска, запустив / sbin / runlevel, который в моем случае был 3. И, конечно, вам нужно вызвать вашу версию apachectl, которая в моем случае была / usr / local / apache2 / bin / apachectl

Благодаря следующему:

Скорбный
источник
Я очень не хочу принимать мой собственный ответ, но это тот, который сработал.
горе
Это было именно то, что мне было нужно! (пришлось перекомпилировать и установить Apache 2.2.27 в / usr / local / apache2). Большое спасибо.
Кристоф Мюллер
эта строка "/ usr / local / apache2 / bin / apachectl $ @" фактически запускает httpd? Вам нужно выдать: sudo chkconfig apache2 start или sudo chkconfig apache2 on?
Олала
8

Проверьте, есть ли у вас httpdсценарий инициализации в /etc/rc.dкаталоге. Если да, то вы можете просто запустить следующую команду, которая позволяет службе httpd запускаться во время загрузки.

chkconfig --level 345 httpd on

Если у вас нет сценария инициализации, просто добавьте /etc/rc.localфайл с помощью apachectl -k start(команда для запуска Apache).

Viky
источник
4

Поскольку вы установили источник, в каталоге /etc/init.d/ не будет установлен скрипт инициализации. Двоичный файл apachectl спроектирован так, чтобы быть совместимым со стандартными параметрами сценария инициализации, поэтому вы вполне можете просто ссылаться на него, а не создавать сценарий оболочки (например, ln -s / usr / local / sbin / apachectl /etc/init.d/ апач)

Затем вы можете следовать процедурам, описанным в других публикациях, для добавления ссылок для вызова сценария инициализации с правильными уровнями выполнения.

Образец цитирования: Документация Apache http://httpd.apache.org/docs/2.2/invoking.html

Начиная с начальной загрузки

Если вы хотите, чтобы ваш сервер продолжал работать после перезагрузки системы, вы должны добавить вызов apachectl в файлы запуска вашей системы (обычно это rc.local или файл в каталоге rc.N). Это запустит Apache от имени пользователя root. Перед этим убедитесь, что ваш сервер правильно настроен на безопасность и ограничения доступа.

Скрипт apachectl предназначен для работы как стандартный скрипт инициализации SysV; он может принимать аргументы start, restart и stop и переводить их в соответствующие сигналы для httpd. Поэтому вы часто можете просто связать apachectl с соответствующим каталогом init. Но не забудьте проверить точные требования вашей системы.

Рассел Хиллинг
источник
Спасибо за ответ, он указал мне правильное направление. Я суммировал то, что я сделал ниже.
скорби
1

chkconfig --levels 345 httpd

запустит httpd на уровнях запуска 3,4,5.

chkconfig --list покажет все сервисы и их текущие уровни запуска. 345 типично для сетевого сервиса.

электронная разведка
источник
1
Это вызывает у меня следующую ошибку в CentOS 6: «для запроса chkconfig может быть указан только один уровень выполнения». Однако добавление «on» в конец команды («chkconfig --levels 345 httpd on») работает как чудо.
Акаме
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

Один из них должен работать.

Neobyte
источник
1
Ответ chkconfig предназначен для систем, подобных Red-Hat (например, CentOS), а update-rc.d - для систем, подобных Debian (например, Ubuntu)
Кайл Брандт,