Comment obtenir Apache au démarrage au démarrage sur Linux?

32

J'ai installé Apache 2 à partir des sources sur ma machine Linux. apachectl -k startfonctionne très bien, mais comment faire démarrer Apache au démarrage?

C'est sur une distribution Red Hat Linux:

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

pleurer
la source
1
Quelle distribution?
ayaz

Réponses:

46

Vous souhaitez ajouter son script d'initialisation au niveau d'exécution approprié. Le script init est généralement l' /etc/init.d/apache2endroit où vous pouvez l'exécuter manuellement /etc/init.d/apache2 startpour le démarrer.

Sur Gentoo, vous écririez:

rc-update add apache2 default

Sur Ubuntu / Debian, cela fonctionne:

sudo update-rc.d apache2 defaults

Sur Red Hat Linux / Fedora / CentOS, une petite recherche sur Google montre ceci:

chkconfig --add httpd

Cela varie un peu d'une distribution à l'autre, mais l'idée est généralement la même. Fondamentalement, toutes ces commandes créent un lien symbolique de /etc/init.d/vers le dossier de niveau d'exécution approprié dans /etc/.

Evan Teran
la source
1
Merci pour la réponse, cela m'a fait pointer dans la bonne direction. J'ai résumé ce que j'ai fait ci-dessous.
pleurer le
Si vous avez construit apache à partir de la source, il n'y aura pas de script init, la partie que vous avez couverte n'est que la configuration en tant que service une fois que vous avez correctement installé un script init dans /etc/init.d/ et c'est précisément ce qui n'est pas '' t vraiment bien documenté pour apache 2
Jaime Hablutzel
26

Voici ce qui a finalement fonctionné pour moi. Cela suppose que vous êtes l'utilisateur root.

  1. vi /etc/init.d/apache2 (modifiez-le comme indiqué ci-dessous)
  2. chmod 755 /etc/init.d/apache2
  3. chkconfig --add apache2
  4. chkconfig --list apache2 (pour vérifier que cela a fonctionné)

Contenu de /etc/init.d/apache2:

#! / bin / bash
#
# apache2 Script de démarrage pour le serveur HTTP Apache
#
# chkconfig: 3 85 15
# description: Apache est un serveur World Wide Web. Il est utilisé pour servir \
# Fichiers HTML et CGI.

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

Vous pouvez obtenir le niveau d'exécution en exécutant / sbin / runlevel, qui dans mon cas était 3. Et bien sûr, vous devez appeler votre version d'apachectl, qui dans mon cas était / usr / local / apache2 / bin / apachectl

Merci aux suivants:

pleurer
la source
Je déteste vraiment accepter ma propre réponse, mais c'est celle qui a fonctionné.
pleurer le
C'était exactement ce dont j'avais besoin! (a dû recompiler et installer un Apache 2.2.27 dans / usr / local / apache2). Merci beaucoup.
Christophe Muller
cette ligne "/ usr / local / apache2 / bin / apachectl $ @" démarre-t-elle réellement httpd? devez-vous lancer: sudo chkconfig apache2 start ou sudo chkconfig apache2 on?
olala
8

Vérifiez si vous avez le httpdscript init dans le /etc/rc.drépertoire. Si oui, vous pouvez simplement exécuter la commande suivante qui permet au service httpd de démarrer au démarrage.

chkconfig --level 345 httpd on

Si vous n'avez pas le script init, ajoutez simplement le /etc/rc.localfichier avec apachectl -k start(la commande pour démarrer Apache).

Viky
la source
4

Comme vous l'avez installé par source, aucun script init ne sera installé dans le répertoire /etc/init.d/. Le binaire apachectl est conçu pour être compatible avec les options de script init standard, vous pouvez donc simplement y créer un lien symbolique plutôt que de créer un script wrapper (par exemple, ln -s / usr / local / sbin / apachectl /etc/init.d/ apache)

Vous pouvez ensuite suivre les procédures décrites dans les autres articles pour ajouter des liens pour appeler le script init aux niveaux d'exécution appropriés.

Citation: documentation Apache http://httpd.apache.org/docs/2.2/invoking.html

Démarrage au démarrage

Si vous souhaitez que votre serveur continue de fonctionner après un redémarrage du système, vous devez ajouter un appel à apachectl aux fichiers de démarrage de votre système (généralement rc.local ou un fichier dans un répertoire rc.N). Cela démarrera Apache en tant que root. Avant de procéder, assurez-vous que votre serveur est correctement configuré pour les restrictions de sécurité et d'accès.

Le script apachectl est conçu pour agir comme un script d'initialisation SysV standard; il peut démarrer, redémarrer et arrêter les arguments et les traduire en signaux appropriés vers httpd. Ainsi, vous pouvez souvent simplement lier apachectl au répertoire init approprié. Mais assurez-vous de vérifier les exigences exactes de votre système.

Russell Heilling
la source
Merci pour la réponse, cela m'a fait pointer dans la bonne direction. J'ai résumé ce que j'ai fait ci-dessous.
pleurer le
1

chkconfig --levels 345 httpd

démarrera httpd dans les niveaux d'exécution 3,4,5.

chkconfig --list affichera tous les services et leurs niveaux d'exécution de démarrage actuels. 345 est typique d'un service réseau.

elint
la source
1
Cela génère l'erreur suivante avec moi sur CentOS 6: "un seul niveau d'exécution peut être spécifié pour une requête chkconfig". Cependant, l'ajout de "on" à la fin de la commande ("chkconfig --levels 345 httpd on") a fonctionné comme un charme.
akame
1

Sur Red Hat Linux, il existe un utilitaire utile appelé ntsysv qui vous permet de sélectionner les services que vous souhaitez démarrer dans votre niveau d'exécution actuel. Vous appelez également spécifiez le niveau d'exécution que vous souhaitez modifier lorsque vous démarrez l'utilitaire à l'aide --level.

Faites défiler jusqu'à httpd et appuyez sur Spacepour qu'une étoile apparaisse dans la case de gauche. Puis TabOK. Appuyez sur Returnpour enregistrer et revenir au shell.

J'ai trouvé qu'il s'installe à peu près par défaut. Je n'ai jamais été dans une position où il n'a pas été installé.

Vous devrez d'abord installer le service en copiant le script de service dans /etc/init.d puis en exécutant:

chkconfig --add <script name>
Garry Harthill
la source
1

Cela dépend de votre saveur de Linux. En supposant que le fichier /etc/init.d/apache2 a été créé, essayez:

chkconfig -a apache2

ou

update-rc.d apache2 defaults

L'un d'eux devrait fonctionner.

Neobyte
la source
1
La réponse chkconfig est pour les systèmes de type Red-Hat (ie CentOS) et update-rc.d est pour les systèmes de type Debian (ie Ubuntu)
Kyle Brandt