Quelle est la différence entre "redémarrage du service" et "rechargement du service"

61

J'essaie de comprendre la différence entre service restart [someservice] et service reload [someservice] . Je comprends que "restart" redémarre le service alors que "reload" recharge la configuration, mais je ne comprends pas assez bien les implications pratiques de ce que je dois utiliser dans un contexte donné.

Un exemple: la plupart des guides que j'ai lus pour configurer PostgreSQL indiquent que, une fois que j'ai édité postgresql.conf et pg_hba.conf pour autoriser les connexions distantes, je devrais émettre sudo service postgresql restart . Cependant, si je devais utiliser la description ci-dessus, je choisirais "reload".

Au cas où cela importerait, je suis sur Ubuntu 11.10 - bien que j'espère une explication aussi générale que possible.

    
posée nxzr 18.02.2012 - 00:45
la source

6 réponses

37

Ce que vous avez dit est correct, reload indique au service de recharger ses fichiers de configuration. Cela signifie qu'il devrait être suffisant pour recharger la configuration; Cependant, il se peut que certains services "ne suivent pas la règle" ou ne rechargent pas les fichiers de configuration. Pour cette raison, vous êtes probablement plus en sécurité avec restart . Personnellement, je n'utilise pas postgresql , donc je ne sais pas.

    
réponse donnée jman6495 18.02.2012 - 01:09
la source
53
  • redémarrer = arrêter + démarrer
  • recharger = reste actif + relire les fichiers de configuration.
réponse donnée Abdennour TOUMI 08.06.2014 - 12:34
la source
8

Tous les services ne prennent pas en charge reload . Pour ceux qui le font, il est généralement préférable de redémarrer (c’est-à-dire que le rechargement cause moins ou pas de temps d’arrêt).

Le manuel des règles Debian spécifie que chaque /etc/init.d/ script doit prendre en charge une action force-reload , ce qui signifie reload si le service le prend en charge, et restart si le service ne prend pas en charge le rechargement.

Je ne sais pas comment cela se traduit dans le monde moderne d’Ubuntu.

    
réponse donnée Marius Gedminas 18.02.2012 - 03:19
la source
2

Pour développer عبد النور التومي , répondez à mon expérience avec systemd.

Dans systemd, chaque fois qu’un processus est lancé, il est exécuté dans le contexte de systemd, par exemple avec les variables d’environnement définies dans son fichier unitaire.

Donc, lorsque vous envoyez un signal systemctl reload [someservice] , il envoie un signal au service pour qu'il se recharge gracieusement s'il est pris en charge. Sinon, le processus ignorera simplement le signal. Ceci est cependant configurable.

Qu'est-ce que je veux dire avec grâce? pour démarrer de nouveaux employés avec la nouvelle configuration ou le nouveau code et arrêter les anciens travailleurs à la fin de la prestation des requêtes en cours, le cas échéant.

Et si vous créez systemctl restart [someservice] , il indiquera à systemctl de dire au service de s'arrêter, de détruire le contexte systemd actuel, d'en créer un nouveau et d'exécuter à nouveau le service. Cela est utile par exemple pour recharger des variables d'environnement dans un contexte systemd ou si un rechargement n'est pas pris en charge.

J'espère que cela clarifie un peu et si je me trompe dans quelque chose s'il vous plaît faites le moi savoir.

    
réponse donnée Gaston Sanchez 17.07.2014 - 21:38
la source
0

actuellement, si un service doit être exécuté (par exemple, un fichier de configuration modifié), vous pouvez notifier le service, mais cela entraîne un redémarrage. Ce serait bien si un rechargement était effectué si le service était déjà en cours d'exécution (bien que je suppose que certains services nécessiteraient des redémarrages pour certains fichiers, le rechargement pour d'autres).

L’exemple le plus complexe auquel je puisse penser est quelque chose comme Apache. Normalement, vous pouvez simplement lui demander de recharger, mais vous devez parfois demander un redémarrage (si vous ajoutez / supprimez des modules par exemple).

    
réponse donnée One Zero 18.02.2012 - 03:07
la source
0

postgres est un bon exemple des grandes différences entre le rechargement et le redémarrage, car ce dernier doit déconnecter tous les clients de base de données.

lorsque les connexions ne doivent pas être annulées, vous pouvez d'abord arrêter le service sans "--force" en utilisant pg_ctlcluster .

dans / etc / postgres / {version} / {dbname} /postgresql.conf et sur lien chaque paramètre a une remarque comme "Ce paramètre ne peut être défini qu'au démarrage du serveur."

    
réponse donnée maletin 16.04.2012 - 10:32
la source

Lire d'autres questions sur les étiquettes