Démarrer, arrêter et redémarrer Apache : commandes et différence avec graceful

Environnement de testFamille RHELAlmaLinux 9.8Compte rootVérifié le 2026-10-29

Sur un serveur Linux, on démarre, arrête et redémarre Apache avec la commande systemctl ; le nom du service est httpd dans la famille RHEL et apache2 dans la famille Debian. Après avoir lu la sortie de systemctl status, le fichier d'unité de httpd et le script apachectl sur un serveur AlmaLinux 9, nous avons constaté que restart arrête Apache puis le relance, alors que graceful garde le processus parent et relit seulement la configuration.

Comme l'arrêt et le redémarrage interrompent réellement le service, nous n'avons pas exécuté start, stop ni restart sur le serveur de test. Nous avons plutôt vérifié le comportement à l'aide de la documentation officielle d'Apache, du manuel httpd.service et des traces de reload présentes sur le serveur. Le nom d'hôte, le numéro de port, les heures et le nombre de requêtes de la sortie ci-dessous sont des valeurs d'exemple.

1️⃣ Commandes pour démarrer, arrêter et redémarrer Apache

Le nom du service Apache dépend de la famille de distribution. La famille RHEL, comme RHEL, AlmaLinux et Rocky Linux, l'enregistre dans systemd sous le nom httpd, et Ubuntu et Debian sous le nom apache2.

tâchesFamille RHEL (httpd)Famille Debian (apache2)
Démarrersystemctl start httpdsystemctl start apache2
Arrêtersystemctl stop httpdsystemctl stop apache2
Redémarrersystemctl restart httpdsystemctl restart apache2
Relire la configuration (graceful)systemctl reload httpdsystemctl reload apache2
Vérifier l'étatsystemctl status httpdsystemctl status apache2
Démarrage automatique au bootsystemctl enable httpdsystemctl enable apache2

Exécutez les commandes du tableau en root. Depuis un compte ordinaire, ajoutez sudo devant la commande.

Si vous confondez les familles et saisissez l'autre nom, la commande ne s'exécute pas. En demandant l'état avec apache2 sur un serveur de la famille RHEL, nous avons obtenu une erreur indiquant que l'unité était introuvable.

systemctl status apache2
Unit apache2.service could not be found.

Le code de sortie était 4, et en remplaçant le nom par httpd sur le même serveur, la sortie normale est apparue.

Dans la famille RHEL, les trois commandes ci-dessous démarrent, arrêtent et redémarrent Apache.

systemctl start httpd

start lance un Apache arrêté. Pour vérifier qu'il a bien démarré, utilisez systemctl status.

systemctl stop httpd

stop arrête Apache. Il n'accepte plus de requêtes web tant que vous ne le relancez pas.

systemctl restart httpd

restart exécute stop puis start. Si vous n'avez modifié que des fichiers de configuration, appliquez-les avec reload (graceful), qui ne coupe pas les connexions.

Sous AlmaLinux 9, apachectl est un script shell installé à la place de l'apachectl fourni par Apache. Il transmet tels quels start, stop, restart et status à systemctl, si bien que apachectl restart et systemctl restart httpd font la même chose.

2️⃣ Vérifier l'état du service Apache

Pour savoir si Apache tourne en ce moment et quand il a démarré, utilisez systemctl status.

systemctl status httpd
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2026-10-17 08:30:49 UTC; 1 week 4 days ago
       Docs: man:httpd.service(8)
    Process: 2930107 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
   Main PID: 741 (httpd)
     Status: "Total requests: 52418; Idle/Busy workers 75/0;Requests/sec: 0.0528; Bytes served/sec: 3.9KB/sec"
      Tasks: 224 (limit: 4615)
     Memory: 184.3M (peak: 593.8M)
        CPU: 47min 33.944s
     CGroup: /system.slice/httpd.service
             ├─    741 /usr/sbin/httpd -DFOREGROUND
             ├─2930111 /usr/sbin/httpd -DFOREGROUND
             ├─2930143 /usr/sbin/httpd -DFOREGROUND
             └─2930144 /usr/sbin/httpd -DFOREGROUND

Oct 28 15:00:00 server systemd[1]: Reloading The Apache HTTP Server...
Oct 28 15:00:00 server systemd[1]: Reloaded The Apache HTTP Server.
Oct 28 15:00:00 server httpd[741]: Server configured, listening on: port 80

active (running) sur la ligne [Active] signifie qu'il est en cours d'exécution, et l'heure après since indique quand il a démarré. Ce serveur avait démarré 11 jours plus tôt sans jamais s'arrêter, et [Main PID] 741 était le processus parent lancé à ce moment-là.

Sous [CGroup], les entrées alignées sous 741 sont les processus enfants qui traitent réellement les requêtes (voir Processus). La ligne [Status] indique le nombre de requêtes traitées jusqu'ici ainsi que le nombre de workers inactifs et occupés.

Les trois lignes de journal en bas de la sortie étaient des traces de reload laissées une fois par jour à la même heure : l'outil logrotate, qui découpe les journaux par date, a exécuté systemctl reload httpd après la rotation, et le manuel httpd.service indique lui aussi que httpd est rechargé après logrotate.

Dans les scripts et les commandes de vérification, on utilise is-active et is-enabled, qui n'affichent qu'un seul mot.

systemctl is-active httpd
active

Quand le service tournait, nous avons obtenu active et le code de sortie 0. Même avec apache2, absent du serveur, nous avons obtenu inactive et le code de sortie 3, comme pour un service arrêté ; dans un script, vérifiez donc d'abord que le nom du service est correct.

systemctl is-enabled httpd
enabled

enabled signifie qu'Apache est enregistré pour démarrer automatiquement au boot.

3️⃣ Redémarrage d'Apache et graceful : la différence

restart et graceful (reload) traitent différemment les requêtes en cours et le processus parent. Nous avons d'abord vérifié cette différence dans les lignes du fichier d'unité de httpd utilisées pour reload et stop.

systemctl cat httpd | grep -E "Exec|Kill"
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
KillSignal=SIGWINCH
KillMode=mixed

La ligne ExecReload signifie que reload exécute httpd -k graceful, et la ligne KillSignal signifie que le signal envoyé à l'arrêt est SIGWINCH (graceful-stop).

C'est pourquoi systemctl restart httpd arrête Apache avec graceful-stop puis le relance. Les requêtes en cours sont terminées avant l'arrêt, mais le processus parent lui-même redémarre, donc le numéro [Main PID] change. Entre l'arrêt et le démarrage, le port est fermé et les nouvelles connexions ne sont pas acceptées. Le fichier d'unité apache2.service du paquet Debian exécute lui aussi apachectl graceful-stop à l'arrêt.

httpd -k restart envoie un signal HUP au processus parent. Selon la documentation officielle d'Apache, le parent reste en place mais met fin immédiatement aux processus enfants, si bien que les requêtes en cours sont coupées et que les statistiques de requêtes repartent de 0.

graceful envoie un signal USR1 au processus parent. Le parent relit les fichiers de configuration, et chaque processus enfant est remplacé par un enfant utilisant la nouvelle configuration dès qu'il a terminé la requête qu'il traitait. Les connexions qui arrivent entre-temps sont mises en attente par le système d'exploitation et ne sont donc pas perdues.

C'est comme un magasin qui reste ouvert pendant que chaque caissier, après avoir servi son client, passe le relais à un collègue du nouveau planning.

🔁 Ce qui change selon les trois façons de redémarrer Apache
Schéma explicatif
🔁 Commande
$ systemctl restart httpdhttpd -k restartsystemctl reload httpd
① Processus parent (Main PID)S'arrête puis redémarreLe numéro de Main PID change.InchangéReçoit le signal HUP et relit les fichiers de configuration.InchangéReçoit le signal USR1 et relit les fichiers de configuration.
② Requêtes en coursTerminées, puis arrêtL'arrêt se fait en graceful-stop (WINCH), donc les requêtes en cours sont terminées.Coupées aussitôtMet fin immédiatement aux processus enfants et lance de nouveaux enfants.Traitées jusqu'au boutChaque enfant est remplacé par un enfant à la nouvelle configuration une fois sa requête terminée.
③ Nouvelles connexionsRefusées jusqu'au redémarrageFerme le port pendant l'arrêt.Traitées une fois les nouveaux enfants lancésGarde le port ouvert et les traite une fois les nouveaux enfants lancés.Jamais coupéesGarde le port ouvert pour que le système d'exploitation mette les connexions en attente.
systemctl restart httpd arrête Apache puis le relance, donc le processus parent lui-même redémarre et les nouvelles connexions ne sont pas acceptées entre-temps.
httpd -k restart envoie un signal HUP au processus parent et met fin immédiatement aux processus enfants, si bien que les requêtes en cours sont coupées.
systemctl reload httpd et apachectl graceful laissent le processus parent tel quel et remplacent les processus enfants à mesure que leurs requêtes se terminent.

Nous avons vérifié cette différence avec le Main PID. Bien que reload ait été exécuté chaque jour, le Main PID 741 et l'heure Active étaient restés ceux d'il y a 11 jours, et les numéros des processus enfants (2930111, etc.) suivaient directement le 2930107 de la ligne [Process] du dernier reload.

systemctl reload httpd, apachectl graceful et httpd -k graceful sont tous le même graceful. Sous AlmaLinux 9, apachectl envoie SIGUSR1 au processus parent avec systemctl kill lorsqu'il reçoit graceful, et apachectl -k graceful, avec -k devant, retire le -k et fait la même chose.

graceful ne fait que relire la configuration ; il ne convient donc pas après une mise à jour du paquet httpd. Selon le manuel httpd.service, reload n'est pas sûr si un module mis à jour utilise une fonction qui n'existe que dans le nouveau httpd ; c'est pourquoi le paquet httpd redémarre automatiquement Apache avec systemctl try-restart lors d'une mise à jour.

4️⃣ Vérifier la syntaxe de la configuration Apache

Même si vous appliquez les changements avec graceful pour ne pas couper les connexions, Apache ne passe pas à la nouvelle configuration si un fichier de configuration contient une faute de frappe. Selon la documentation officielle d'Apache, restart et graceful effectuent d'abord une vérification de syntaxe et, en cas d'erreur, se contentent d'afficher le message d'erreur sans redémarrer.

Après avoir modifié la configuration, vérifiez donc d'abord la syntaxe avec apachectl -t.

apachectl -t
Syntax OK

apachectl -t a affiché une seule ligne Syntax OK, et apachectl configtest a donné le même résultat. L'apachectl de la famille RHEL exécute httpd -t tel quel lorsqu'il reçoit -t.

En vérifiant un fichier de configuration de test contenant un nom de directive mal orthographié, nous avons obtenu, au lieu de Syntax OK, l'erreur AH00526 avec le numéro de ligne et la directive non reconnue ([Invalid command 'DirectoryIndx']), et le code de sortie était 1. Corrigez la ligne indiquée dans le message d'erreur, puis vérifiez à nouveau.

systemctl reload httpd

Une fois la vérification réussie, appliquez la configuration avec reload. Selon la documentation officielle d'Apache, la vérification ne porte que sur la syntaxe ; l'application peut donc échouer même si elle réussit. Après reload, vérifiez encore une fois la ligne [Active] de systemctl status et les journaux tout en bas.

🔲 Simulateur de commandes Apache

Sur le serveur virtuel du simulateur ci-dessous, vous pouvez saisir vous-même des commandes systemctl, apachectl et httpd -k. Après reload, le Main PID reste le même et seuls les numéros des processus enfants changent. Après restart, même le Main PID prend un nouveau numéro.

Simulateur de commandes Apachehttpd famille RHEL
[root@server work]#
Les touches ↑↓ rappellent les commandes saisies auparavant.

🔢 FAQ & contenus recommandés

Sous AlmaLinux 9, la saisie de apachectl fullstatus a renvoyé une erreur indiquant que l'option fullstatus n'est pas prise en charge (not supported), avec le code de sortie 2. L'apachectl de la famille RHEL est un script installé à la place de l'apachectl fourni par Apache ; il n'accepte donc que start, stop, restart, status, graceful, graceful-stop, configtest, -t et -v.

Selon le manuel httpd.service, l'unité httpd est désactivée (disabled) par défaut, et preset: disabled sur la ligne [Loaded] de systemctl status correspond à cette valeur par défaut. Exécutez une fois systemctl enable httpd pour qu'il démarre à chaque boot ; en ajoutant --now à enable, il démarre aussi immédiatement.

Selon le manuel httpd.service, lancer httpd directement depuis un shell root démarre le service en dehors de systemd, sans les restrictions de sécurité par défaut comme SELinux. Démarrez et arrêtez donc le service avec systemctl ou apachectl, et n'utilisez la commande httpd que pour des options qui ne lancent pas le service, comme la vérification de syntaxe -t.

ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 1   +   6   =